2. 解法2結語
判斷是否存在重複值,大致兩種思路,一種是加以優化的雙重for法,對每乙個數進行每一對的比對,超級耗時勉強通過檢驗; 再就是對元素進行快速排序,再進行是否重複的判斷。
給定乙個整數陣列,判斷是否存在重複元素。
如果任何值在陣列中出現至少兩次,函式返回 true。如果陣列中每個元素都不相同,則返回 false。
示例 1:
輸入: [1,2,3,1]示例 2:輸出: true
輸入: [1,2,3,4]1.1 解題思路輸出: false
設定i,j標誌,對每乙個nums[i],從自身向後在陣列中進行一次遍歷,檢視是否有重複。
1.2 c實現
bool containsduplicate(int* nums, int numssize) }}
return flag;
}
1.3 時間複雜度分析
儘管進行過優化,滿足條件後break,以及j=i的迴圈,根據時間複雜度乘法規則,時間複雜度是o(n²),具體27個例子執行時間在1800ms左右。
2.1 解題思路
對該陣列進行快速排序,再遍歷一次陣列,對nums[i]與nums[i+1]進行比對,檢視是否有重複。
2.2 c實現
bool containsduplicate(int* nums, int numssize)
}return flag;
}void sort(int *a, int
left, int
right)
int i = left;
int j = right;
int key = a[left];
while(i < j) /*控制在當組內尋找一遍*/
a[i] = a[j];
while(i < j && key >= a[i])
a[j] = a[i];
}a[i] = key;
sort(a, left, i - 1);
sort(a, i + 1, right);
}
2.3 時間複雜度分析
根據時間複雜度加法規則,複雜度為快速排序的時間複雜度,o(nlog n)。具體27個例子執行時間為1400ms。
本問題還有更巧妙地解法,等待日後**。
217 存在重複元素
存在重複元素 給定乙個整數陣列,判斷是否存在重複元素。如果任何值在陣列中出現至少兩次,函式返回 true。如果陣列中每個元素都不相同,則返回 false。輸入 1,2,3,1 輸出 true 輸入 1,2,3,4 輸出 false 輸入 1,1,1,3,3,4,3,2,4,2 輸出 true pub...
217 存在重複元素
217.存在重複元素 給定乙個整數陣列,判斷是否存在重複元素。如果任何值在陣列 現至少兩次,函式返回 true。如果陣列中每個元素都不相同,則返回 false。示例 1 輸入 1,2,3,1 輸出 true 示例 2 輸入 1,2,3,4 輸出 false 示例 3 輸入 1,1,1,3,3,4,3...
217 存在重複元素
給定乙個整數陣列,判斷是否存在重複元素。如果任何值在陣列 現至少兩次,函式返回 true。如果陣列中每個元素都不相同,則返回 false。輸入 1 2,3 1 輸出 true輸入 1 2,3 4 輸出 false輸入 1 1,1 3,3 4,3 2,4 2 輸出 true排序後,相同的元素必定相鄰。...