217存在重複元素 219 存在重複元素 II

2021-09-29 07:35:25 字數 2264 閱讀 6190

題目官網上有,直接上思路:

思路一:利用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...