Re: [闲聊] 每日leetcode

楼主: sustainer123 (caster)   2024-05-31 11:50:29
https://leetcode.com/problems/single-number-iii
260. Single Number III
给定一数列 此数列只有两个数字单独出现 其他元素都成双成对
请回传单独出现的两个数字
Example 1:
Input: nums = [1,2,1,3,2,5]
Output: [3,5]
Explanation: [5, 3] is also a valid answer.
Example 2:
Input: nums = [-1,0]
Output: [-1,0]
Example 3:
Input: nums = [0,1]
Output: [1,0]
Constraints:
2 <= nums.length <= 3 * 104
-231 <= nums[i] <= 231 - 1
Each integer in nums will appear twice, only two integers will appear once.
思路:
哈希表纪录出现次数
Python Code:
class Solution:
def singleNumber(self, nums: List[int]) -> List[int]:
res = []
map = defaultdict(int)
for n in nums:
map[n] += 1
for k,v in map.items():
if v == 1:
res.append(k)
if len(res) == 2:
return res
应该有位运算解法 但我试不出来 告辞
作者: DJYOSHITAKA (Evans)   2024-05-31 11:51:00
别卷了
作者: wwndbk (黑人问号)   2024-05-31 11:53:00
大师
作者: argorok (s.green)   2024-05-31 11:53:00
大师
作者: JIWP (JIWP)   2024-05-31 11:54:00
你就先所有数xor一次接着找出这个结果哪一个位元是1代表这两个数在这个位元一个是1一个是0再来你就依照这个位元去把nums的元素分成两堆最后将这两堆分别xor就可以得到答案了分成该位元分别是1、0的两堆
楼主: sustainer123 (caster)   2024-05-31 11:58:00
我试试可是这样怎么感觉时间复杂度还不如计数
作者: JIWP (JIWP)   2024-05-31 11:59:00
时间复杂度就O(N)主要是题目要求不能用extra space

Links booklink

Contact Us: admin [ a t ] ucptt.com