簡體   English   中英

創建2個數組-第一個具有隨機整數,第二個具有唯一的隨機整數

[英]Create 2 arrays - 1st has random integers, 2nd has unique random integers

我正在處理學校作業。 我需要創建2個int[]數組。 第一個數組int[10]用隨機integers填充。 第二個數組的編號與第一個數組相同,但是沒有重復。

例如,假設我的第一個數組是1,2,2,3,1,5,5,7,9,9 我的第二個數組將是1,2,3,5,7,9

有人可以指出正確的方向來解決這個問題。

將數字放入Set中 然后從集合中檢索數字。 簡單! 重復項將被自動刪除!

我將執行以下操作(假設這是家庭作業,並且您不應該做任何過於復雜的事情)...

  1. 使用java.util.Arrays.sort(myArray);對數組進行排序 -這將對數字進行排序,並確保所有重復的數字彼此相鄰。
  2. 遍歷數組並保留唯一數字的計數(即,將當前數字與下一個數字進行比較-如果它們不同,則將計數器加1)
  3. 創建第二個int[]數組以正確的大小(從第2點開始)
  4. 重復與點2相同的過程,但是用唯一的數字填充新數組,而不是增加計數器。

這應該足以使您朝正確的方向前進。 當您有一些代碼時,如果仍然有疑問,請返回我們詢問。

我建議使用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;
      }

現在,在插入新數組之前使用此功能。 我讓你找出那部分。 畢竟是功課!

提示(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]

@WATTO Studios有一個很好的方法。 當涉及重復項時,排序總是很有用的。

我將建議使用哈希表的另一種方法:

  1. 創建一個哈希結構,將整數作為鍵(原始數組中的數字),並將計數器作為值。
  2. 遍歷原始數組,對於遇到的每個數字,它都是哈希表中對應的計數器值。
  3. 再次遍歷原始數組。 對於每個數字,請檢查哈希表。 如果關聯的計數器大於1,則刪除該值並遞減計數器。

讓我們看一個實際的案例:

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,則刪除該項目。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM