1. 思路
還可以把當前序列當成是乙個下標和下標對應值是相同的陣列(時間複雜度為o(n),空間複雜度為o(1));遍歷陣列,判斷當前位的值和下標是否相等:
* 若相等,則遍歷下一位;
* 若不等,則將當前位置i上的元素和a[i]位置上的元素比較:若它們相等,則找到了第乙個相同的元素;若不等,則將它們兩交換。換完之後a[i]位置上的值和它的下標是對應的,但i位置上的元素和下標並不一定對應;重複2的操作,直到當前位置i的值也為i,將i向後移一位,再重複2。
本文採用思路3,如果還是不懂,看下面的例項分析就懂了!
舉例說明:
* 0(索引值)和2(索引值位置的元素)不相等,並且2(索引值位置的元素)和1(以該索引值位置的元素2為索引值的位置的元素)不相等,則交換位置,陣列變為:;
* 0(索引值)和1(索引值位置的元素)仍然不相等,並且1(索引值位置的元素)和3(以該索引值位置的元素1為索引值的位置的元素)不相等,則交換位置,陣列變為:;
* 0(索引值)和3(索引值位置的元素)仍然不相等,並且3(索引值位置的元素)和0(以該索引值位置的元素3為索引值的位置的元素)不相等,則交換位置,陣列變為:;
推薦閱讀:
★ 求職經驗:點這裡
★ 演算法刷題:點這裡
★ 投資理財:點這裡
★ ai很簡單:
★ 掃盲科普:點這裡
將乙個陣列中不重複 陣列中重複的數字
題目 在乙個長度為 n 的陣列 nums 裡的所有數字都在 0 n 1 的範圍內。陣列中某些數字是重複的,但不知道有幾個數字重複了,也不知道每個數字重複了幾次。請找出陣列中任意乙個重複的數字。示例 輸入 2,3,1,0,2,5,3 輸出 2 或 3 解法一 通過中間陣列,遍歷原陣列,如果中間陣列中沒...
乙個陣列中找重複數
乙個大小為n的陣列,裡面的數都屬於範圍 0,n 1 有不確定的重複元素,找到至少乙個重複元素,要求o 1 空間和o n 時間。include const int no repeat flag 1 int findrepeatnumberinarray int a,int n return no re...
在乙個陣列中隨機選擇若干不重複的元素
問 總共65535個埠,每次隨機取乙個,怎麼保證每次取得和以前不一樣?如果取了6萬多次,後面的很容易重複,怎麼優化?答 先用乙個長度為65535的數組裝有序裝下1 65535。用乙個變數length標記其陣列長度,初始值為65535,用隨機函式在 0,length 產生乙個隨機數,作為選取元素的下標...