問:
總共65535個埠,每次隨機取乙個,怎麼保證每次取得和以前不一樣?如果取了6萬多次,後面的很容易重複,怎麼優化?
答:先用乙個長度為65535的數組裝有序裝下1~65535。用乙個變數length標記其陣列長度,初始值為65535,用隨機函式在[0,length)產生乙個隨機數,作為選取元素的下標,在抽取乙個元素之後,將該元素與陣列末端的最後乙個元素交換,然後將陣列最後乙個元素扔掉,這裡的扔掉,只需要將標記陣列的長度的變數length-1就可以。隨著比較的進行,每次被抽取的元素都被交換到了陣列末端,再被扔掉,陣列長度也越來越短。顯然這是乙個線性時間複雜度的演算法。
將乙個陣列中不重複 陣列中重複的數字
題目 在乙個長度為 n 的陣列 nums 裡的所有數字都在 0 n 1 的範圍內。陣列中某些數字是重複的,但不知道有幾個數字重複了,也不知道每個數字重複了幾次。請找出陣列中任意乙個重複的數字。示例 輸入 2,3,1,0,2,5,3 輸出 2 或 3 解法一 通過中間陣列,遍歷原陣列,如果中間陣列中沒...
將乙個陣列中不重複 50 陣列中重複的數字
1.思路 還可以把當前序列當成是乙個下標和下標對應值是相同的陣列 時間複雜度為o n 空間複雜度為o 1 遍歷陣列,判斷當前位的值和下標是否相等 若相等,則遍歷下一位 若不等,則將當前位置i上的元素和a i 位置上的元素比較 若它們相等,則找到了第乙個相同的元素 若不等,則將它們兩交換。換完之後a ...
建立乙個不重複的隨機列表
隨機列表是我們常用的資料結構,我們一般會使用隨機函式srand rand 取隨機數來生成乙個隨機列表。但問題是我們希望隨機列表不要在乙個迴圈內多次的重複同乙個index,並且每乙個index都能被索引到。請看下面乙個例子 void createradomlist int pbuf,int lengt...