创建2个数组 - 第1个具有随机整数,第2个具有唯一的随机整数

时间:2012-04-18 13:24:12

标签: java arrays random duplication

我正在研究学校的家庭作业问题。我需要创建2个int[]数组。第一个数组int[10]填充了随机integers。第二个数组与第一个数组中的数字相同,但没有任何重复。

例如,假设我的第一个数组是1,2,2,3,1,5,5,7,9,9。我的第二个数组将是1,2,3,5,7,9

有人可以指出我正确的方向来解决这个问题。

5 个答案:

答案 0 :(得分:4)

将数字放入Set。然后从Set中检索数字。简单!重复项将自动删除!

答案 1 :(得分:2)

我会做以下(假设它是功课,你不应该做太复杂的事情)......

  1. 使用java.util.Arrays.sort(myArray);对数组进行排序 - 这将对数字进行排序,并确保所有重复的数字彼此相邻。
  2. 循环遍历数组并保持唯一数字的数量(即将当前数字与下一个数字进行比较 - 如果它们不同,则将计数器增加1)
  3. 将第二个int[]数组创建为正确的大小(从第2点开始)
  4. 重复与第2点相同的过程,但是使用唯一的数字填充新数组,而不是递增计数器。
  5. 这足以让你朝着正确的方向前进。如果您有一些代码,如果您仍有疑问,请回复我们并询问。

答案 2 :(得分:1)

我建议使用Set,但这是一种不使用Set的方法。 (注意:这样可行,但不要问我这个效率!)

有这样的功能 -

   public static boolean isNumberInArray(int[] array, int number) 
      {
          for(int i=0; i<array.length; i++)
           {
                if(number == array[i])
                   return true;
           }
          return false;
      }

现在在插入新数组之前使用此函数。我告诉你要弄明白那一部分。毕竟这是家庭作业!

答案 3 :(得分:0)

提示(WATTO更好地解释):

a = sorted first array
lastItem = a[0]
append lastItem into new array
for i in 1 to length(a):
   if a[i] != lastItem:
      append a[i] into new array
      lastItem = a[i]

答案 4 :(得分:0)

@WATTO Studios有一个很好的方法。当涉及重复时,排序总是有用的。

我将建议使用哈希表的替代方法:

  1. 使用整数作为键(原始数组中的数字)和计数器作为值创建散列结构。
  2. 浏览原始数组,对于遇到的每个数字,增加它在哈希表中的相应计数器值。
  3. 再次浏览原始数组。对于每个数字,请检查哈希表。如果关联的计数器大于1,则删除该值并递减计数器。
  4. 让我们看一个实际案例:

    4 5 6 4 1 1 3
    

    第一遍将创建下表:

    1 -> 2
    3 -> 1
    4 -> 2
    5 -> 1
    6 -> 1
    

    第二步一步一步:

    4 5 6 4 1 1 3
    ^
    
    4 has a counter of 2 -> remove and decrement:
    
    1 -> 2
    3 -> 1
    4 -> 1
    5 -> 1
    6 -> 1
    
    5 6 4 1 1 3
    ^
    
    5 has a counter of 1 -> ignore 
    6 has a counter of 1 -> ignore 
    4 has a counter of 1 -> ignore 
    1 has a counter of 2 -> remove and decrement
    
    1 -> 1
    3 -> 1
    4 -> 1
    5 -> 1
    6 -> 1
    
    5 6 4 1 3
          ^    
    1 has a counter of 1 -> ignore
    3 has a counter of 1 -> ignore
    

    最终阵列:

    5 6 4 1 3
    

    当然,有更有效的方法来处理删除(因为使用数组意味着移位),例如将项目插入到链接列表中。我会让你决定的。 :)

    修改:更快的方法,需要一次通过:

    1. 使用与上述相同的散列结构。
    2. 浏览原始数组。对于每个项目,请检查表格。如果关联的计数器为0,则将其增加为1.如果已经为1,则删除该项目。
相关问题