[英]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中 。 然后從集合中檢索數字。 簡單! 重復項將被自動刪除!
我將執行以下操作(假設這是家庭作業,並且您不應該做任何過於復雜的事情)...
java.util.Arrays.sort(myArray);
對數組進行排序 -這將對數字進行排序,並確保所有重復的數字彼此相鄰。 int[]
數組以正確的大小(從第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有一個很好的方法。 當涉及重復項時,排序總是很有用的。
我將建議使用哈希表的另一種方法:
讓我們看一個實際的案例:
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
當然,還有一些更有效的方法來處理刪除操作(因為使用數組意味着移動),例如將項目插入到鏈表中。 我讓你決定。 :)
編輯 :甚至更快的方法,只需一次通過:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.