作者Rushia (みけねこ的鼻屎)
標題Re: [閒聊] 每日leetcode
時間2024-03-25 09:22:35
https://leetcode.com/problems/find-all-duplicates-in-an-array
442. Find All Duplicates in an Array
給你一個大小為 n 的陣列,裡面只包含1~n,每個元素只會出現一次或兩次,求出哪些
數字出現超過一次。
你必須使用常數空間和線性時間複雜度。
思路:
1.把整個陣列當成一個 map,因為數字只在1~n的關係不需額外空間,每次都把
nums[i] - 1 位置的索引標記成負數(乘上-1),如果某次走訪時發現已經是負的
就表示當前值重複出現了。
pycode:
--------------------------------------------------------------------
class Solution:
def findDuplicates(self, nums: List[int]) -> List[int]:
res = []
for i in range(len(nums)):
idx = abs(nums[i]) - 1
if nums[idx] < 0:
res.append(abs(nums[i]))
else:
nums[idx] *= -1
return res
--------------------------------------------------------------------
--
https://i.imgur.com/AhrL1pB.jpg
--
※ 發信站: 批踢踢實業坊(ptt-web.org.tw), 來自: 101.138.175.27 (臺灣)
※ 文章網址: https://ptt-web.org.tw/Marginalman/M.1711329758.A.F2B
推 oinishere: 這題我還有看到用快慢指針的 超詭異的題目= = 03/25 09:23
推 JIWP: 大師 03/25 09:24
推 SecondRun: 大師 03/25 09:24
→ Rushia: 快慢指針不是這題吧 03/25 09:25
→ Rushia: 這題可能有一個以上環 03/25 09:25
推 colortea: 演藝圈一堆包養好嗎 03/25 09:25 → JIWP: 快慢指標是昨天的,那題很多解法 03/25 09:26
推 oinishere: 我搞錯了 好像是昨天還前天 就是只找一個重複的那題? 03/25 09:26