1. 程式人生 > 資訊 >慶祝 Windows Insider 計劃 7 週年,微軟釋出 Win11 全新主題桌布下載:支援深色/淺色模式

慶祝 Windows Insider 計劃 7 週年,微軟釋出 Win11 全新主題桌布下載:支援深色/淺色模式

排序

通過對陣列排序,相同的數字必定相鄰,掃描一下就行,但是時間複雜度為O(nlogn)

class Solution {
public:
int findRepeatNumber(vector<int>& nums) {
sort(nums.begin(),nums.end());
for(int i=0;i<nums.size()-1;i++)
{
if(nums[i]==nums[i+1])
{
return nums[i];
}
}
return 0;
}
};

雜湊表

時間複雜度為O(n),空間複雜度為O(n)

class Solution {
public:
int findRepeatNumber(vector<int>& nums) {
unordered_map<int, bool> tmp;
for(int i=0; i<nums.size(); i++)
{
if(tmp.count(nums[i]))
{
return nums[i];
}
tmp[nums[i]]=true;
}
return 0;
}
};

遍歷

這個遍歷的方法比較取巧,因為n個數字對應0到n-1,那麼只要在遍歷的時候,把相應的值放在對應的位置,那麼等下次再有值要放在對應位置的時候,就找到了重複數字。

class Solution {
public:
int findRepeatNumber(vector<int>& nums) {
for(int i=0; i<nums.size(); i++)
{
while(nums[i] != i)
{
if(nums[i] == nums[nums[i]])
{
return nums[i];
}
int tmp = nums[i];
nums[i] = nums[tmp];
nums[tmp] = tmp;
}
}
return 0;
}
};