217 存在重複元素

2021-08-20 22:38:09 字數 1263 閱讀 3723

2. 解法2結語

判斷是否存在重複值,大致兩種思路,一種是加以優化的雙重for法,對每乙個數進行每一對的比對,超級耗時勉強通過檢驗; 再就是對元素進行快速排序,再進行是否重複的判斷。

給定乙個整數陣列,判斷是否存在重複元素。

如果任何值在陣列中出現至少兩次,函式返回 true。如果陣列中每個元素都不相同,則返回 false。

示例 1:

輸入: [1,2,3,1]

輸出: true

示例 2:

輸入: [1,2,3,4]

輸出: false

1.1 解題思路

設定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排序後,相同的元素必定相鄰。...