2015-09-30 126 views
-3

我正在写一个函数使用java语言,它接受一维数组和数组的大小作为函数的输入。我想知道数组中有多少个函数值。我将如何做到这一点?JAVA中的数组,重复?

+2

一种选择,它不需要使用除数组以外的任何数据结构,将第一_sort_阵列,和第二到遍历数组,每次创建新值时增加一个计数器。 –

+1

另一种选择是,如果你可以使用更奇特的数据结构,那就是使用地图并遍历数组一次,为每个数字插入相同的值。然后,您可以简单地检查地图中的_number_个键,这是不同值的数量。 –

+2

为什么你编辑这个问题,以便没有人能看到它是什么? – Domysee

回答

1
#Find unique items from array: 
1. Create one new array 
2. Take each item from existing array 
3. Check if the item is exist in new array 
4. **If not exist push the item into new array** else go for next item 
5. After iterating all item in array get the length of new array 
+0

我们将如何检查来自现有数组的项目是否在新数组中? –

+0

直截了当的是,从新数组中获取每个项目并将其与现有数组中的当前项目进行比较。 – Dipak

2

方法1(O(nlogn)):

  1. 排序阵列。
  2. 比较数组中的相邻元素
  3. 每当相邻元素不相等时增加计数。请使用额外变量来照顾三个连续的相同元素。

方法2(O(n)的但空间的为O(n)复杂性):

  1. 为值创建哈希表。
  2. 如果不存在于散列表中,则插入一个值。
  3. 计数和在打印值用于本哈希表
+1

散列太复杂。我会创建一个左值节点值较小的二叉树,右值节点值较大。无需处理散列冲突;可管理的空间和时间要求。 – Jens

0
#include <stdio.h> 

int main() 
{ 
    int n[10] = {1,2,5,5,3,4,1,4,5,11}; 
    int count = 0; int i = 0; 
    for (i=0; i< 10; i++) 
    { 
     int j; 
      for (j=0; j<i; j++) 
       if (n[i] == n[j]) 
       break; 
      if (i == j) 
       count += 1; 
    } 

    printf("The counts are: %d distinct elements", count); 

    return 0; 
} 
+0

谢谢,是的,我用另一种方法。 –