判斷陣列中是否有重複值,要求空間複雜度為o(1)。
基本思想:先把陣列排序,設定乙個int變數temp等於陣列的第乙個數a[0],依次遍歷整個陣列,如果temp不與當前遍歷的數a[i]相同,這將a[i]賦值給temp,如果相同,則證明有重複值。排序複雜度為o(nlogn),空間複雜度o(1)。
**:
class checker
return
false;
}};
在乙個長度為n的陣列裡的所有數字都在0到n-1的範圍內。 陣列中某些數字是重複的,但不知道有幾個數字是重複的。也不知道每個數字重複幾次。請找出陣列中任意乙個重複的數字。 例如,如果輸入長度為7的陣列,那麼對應的輸出是重複的數字2或者3。
1. 時間複雜度為o(n),空間複雜度為o(n)
基本思想: 開闢乙個陣列大小為n的bool陣列temp,將其元素都初始化為false。依次遍歷整個陣列a[i],將a[i]作為bool的key,將對應bool[a[i]]的值改為true,表示a[i]被遍歷過了,如果下次遍歷到的數其bool[a[i]]等於true,證明其為重複值,輸出。
**:
bool duplicate(int numbers, int
length, int* duplication)
else
}return
false;
}
2. 時間複雜度為o(n),空間複雜度為o(1)
基本思想:因為乙個長度為n的陣列裡的所有數字都在0到n-1的範圍內,則如果將這個陣列排序且這個陣列沒有重複值的話,每個陣列的值a[i]與其在陣列的下標i應該是相等的,如果出現重複值的話,就會出現錯位的情況。故:
1. 我們可以從頭到尾掃瞄這個陣列的每個數字,當掃瞄到下標為i的數字,比較這個數字a[i]是否與下標i相等,如果相等,則接著掃瞄下乙個數字,如果不等,拿它跟第a[i]個數比較,即跟a[a[i]]比較。
2. 如果a[i]==a[a[i]]則證明找到了乙個重複的數,因為該數字在下標i,跟下標a[i]都出現了。如果不相等,則將第i個數字跟第a[i]數字進行交換。
3. 接下來重複這個比較,交換的過程,知道我們發現乙個重複的數字。
bool duplicate(int numbers, int
length, int* duplication)
for(int i=0;iswap(numbers[i],numbers[numbers[i]]);//交換該數到對應的位置}}
return
false;
}
陣列 陣列中重複的數字
在乙個長度為n的陣列裡的所有數字都在0到n 1的範圍內。陣列中某些數字是重複的,但不知道有幾個數字是重複的。也不知道每個數字重複幾次。請找出陣列中任意乙個重複的數字。例如,如果輸入長度為7的陣列,那麼對應的輸出是第乙個重複的數字2。思路 python 實現 an highlighted block ...
陣列中重複的數字
在乙個長度為n的陣列裡的所有數字都在0到n 1的範圍內。陣列中某些數字是重複的,但不知道哪幾個 數字重複了,也不知道每個數字重複了幾次。請找出陣列中任意乙個重複的數字。例如 如果輸入長度為7的陣列,那麼對應的輸出是重複的數字2或者3。include iostream using namespace ...
陣列中重複的數字
題目 在乙個長度為n的陣列裡的所有數字都在0到n 1的範圍內。陣列中某些數字是重複的,但不知道有幾個數字是重複的。也不知道每個數字重複幾次。請找出陣列中任意乙個重複的數字。例如,如果輸入長度為7的陣列,那麼對應的輸出是重複的數字2或者3。思路 用雜湊表解決的時間複雜度和空間複雜度為o n 因為陣列中...