題目官網上有,直接上思路:
思路一:利用python的set無重複元素的特性
class
solution
:def
containsduplicate
(self, nums: list[
int])-
>
bool
:return
len(
set(nums)
)<
len(nums)
思路二:先對陣列進行排序,重複元素肯定排在前後,判斷是否相等即可
class
solution
:def
containsduplicate
(self, nums: list[
int])-
>
bool
: a =
sorted
(nums)
for i in
range
(len
(a)-1)
:return a[i]
==a[i+
1]
思路二其實是有bug的,因為只判斷了前兩個就輸出了結果
正確更改思路二:
class
solution
:def
containsduplicate
(self, nums: list[
int])-
>
bool
: a =
sorted
(nums)
for i in
range
(len
(a)-1)
:if a[i]
== a[i+1]
:return
true
再更改完善,題目要求不重複時返回false,而上述**對於不重複返回none。增加else,以及空陣列判斷
class
solution
:def
containsduplicate
(self, nums: list[
int])-
>
bool:if
not nums :
return
false
a =sorted
(nums)
for i in
range
(len
(a)-1)
:if a[i]
== a[i+1]
:return
true
return
false
總結思路二,因為原題對空間複雜度沒要求,所以為了避免影響原陣列,新建陣列。nums.sort()會修改nums,原地排序,不占用空間。時間複雜度o(nlogn)
思路三:下面是我的主打歌,學習雜湊集合,以空間換取時間。
class
solution
:def
containsduplicate
(self, nums: list[
int])-
>
bool
: hash_set=
set(
)for num in nums:
if num in hash_set:
return
true
hash_set.add(num)
return
false
沒想到這麼簡單的題我能寫這麼多,繼續加油o( ̄▽ ̄)
219. 存在重複元素 ii
題意:乙個列表中是否存在兩個相同的元素,且這兩個元素的索引值至多為k
使用雜湊對映來做,key為列表值,value為索引
class
solution
:def
containsnearbyduplicate
(self,nums,k)
: dic=
for i in
range
(len
(nums)):
if nums[i]
in dic and i-dic[nums[i]
]<=k:
return
true
dic[nums[i]]=i
return
false
217 存在重複元素
2.解法2結語 判斷是否存在重複值,大致兩種思路,一種是加以優化的雙重for法,對每乙個數進行每一對的比對,超級耗時勉強通過檢驗 再就是對元素進行快速排序,再進行是否重複的判斷。給定乙個整數陣列,判斷是否存在重複元素。如果任何值在陣列中出現至少兩次,函式返回 true。如果陣列中每個元素都不相同,則...
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...