【Leetcode Daily】961在长度2N的数组中找出重复N次的元素
发表于|更新于|力扣日常 | LeetcodeDaily
|总字数:410|阅读时长:1分钟|浏览量:
题目浅析
想查看原题可以点击题目链接。
简单地说,就是给一个数组,长度 2n,现在其中有一个数字重复 n 次,需要找到这个数字。
思路分享
从题目得知,除了某个数字,其余数字各不相同,换句话,只要出现重复数字就是答案,于是用集合保存已遍历数字,找到重复即可。
但是这种解法的空间复杂度是 O(n),有一种 O(1) 的解决方案叫做摩尔投票。具体怎么做,后面再说,今天先到这里:)
这里是睡完午觉的陆爻齐,补上空间复杂度 O(1) 的解决方案,就是参照 【Leetcode Daily】169多数元素 的多数投票法,但本题的这个元素并非严格大于,需要做一点改变,也就是剔除第一个元素。
具体的说,如果第一个元素在后面有重复的,就当做答案,如果这个不是答案,那么剩下的元素中,答案的个数严格大于剩下的数字,就能使用多数投票法了。
代码解答(强烈建议自行解答后再看)
- 参考题解
1 | class Solution: |
文章作者: 陆爻齐-LuYaoQi
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 LuYaoQi's Blogs!
相关推荐

2025-11-25
【Leetcode Daily】1290二进制链表转整数
题目浅析 想查看原题可以点击题目链接。 简单地说,就是用链表存储二进制数,现在给你链表,请你给出所代表的二进制数的十进制表现。 思路分享 二进制转十进制的方法很简单,起始为 0,取数加上去,乘二,再取数加上去直到取尽。至于遍历链表,只要 head != None,head = head.next 即可。 https://leetcode.cn/problems/convert-binary-number-in-a-linked-list-to-integer/solutions/3723060/bian-li-lian-biao-pythonjavaccgojsrust-b-ykjd/ 代码解答(强烈建议自行解答后再看) 参考题解 12345678910111213# Definition for singly-linked list.# class ListNode:# def __init__(self, val=0, next=None):# self.val = val# self.next =...

2025-12-28
【Leetcode Daily】1351负数有序矩阵中的负数
题目浅析 想查看原题可以点击题目链接。 简单地说,就是给一个行列都是非升序排列的数组,其中整数可正可负,求整个数组的负数个数。 思路分享 利用行列皆非升序排列,可以从数组的右上角开始排查,求出每一列的负数个数,然后到了下一行,负数的个数不可能更少,这样复杂度就成了O(m+n) https://leetcode.cn/problems/count-negative-numbers-in-a-sorted-matrix/solutions/3861108/tu-jie-zuo-fa-tong-240-ti-yi-tu-miao-don-vovs/?envType=daily-question&envId=2025-12-28 代码解答(强烈建议自行解答后再看) 参考题解 123456789101112131415class Solution: def countNegatives(self, grid: List[List[int]]) -> int: m, n = len(grid), len(grid[0]) ans...

2026-01-01
【Leetcode Daily】147对链表进行插入排序
题目浅析 想查看原题可以点击题目链接。 简单地说,就是给一个链表,要对这个链表做插入排序。 思路分享 只能遍历链表,留一个哨兵节点,因为头节点也可能更换。 把第一个节点当成已遍历的节点,一个个向后,如果新遇到的节点值比最后一个已遍历节点更大,这个好办,就直接插后面; 但如果新的节点值更少,那就得从头遍历找到合适的位置插入。这里的插入处理起来很是要注意,很容易把指针指错。 https://leetcode.cn/problems/insertion-sort-list/solutions/491124/dui-lian-biao-jin-xing-cha-ru-pai-xu-by-leetcode-s/ 代码解答(强烈建议自行解答后再看) 参考题解 12345678910111213141516171819202122232425262728# Definition for singly-linked list.# class ListNode:# def __init__(self, val=0, next=None):# ...

2025-12-30
【Leetcode Daily】1669合并两个链表
题目浅析 想查看原题可以点击题目链接。 简单地说,就是给两个链表,将一个链表代替另一个链表的中间一段,返回合并后的链表。 思路分享 就是找到要删除区间的前一个节点和中间的最后一个节点,这两个节点的 next 分别是要插入链表的起点和终点,如此就插好了。 https://leetcode.cn/problems/merge-in-between-linked-lists/solutions/3820116/ling-shen-ti-dan-qing-xi-ti-jie-by-pure-11575/ 代码解答(强烈建议自行解答后再看) 参考题解 12345678910111213141516171819# Definition for singly-linked list.# class ListNode:# def __init__(self, val=0, next=None):# self.val = val# self.next = nextclass Solution: def...

2025-11-26
【Leetcode Daily】2058找出临界点之间的最小和最大距离
题目浅析 想查看原题可以点击题目链接。 简单地说,就是给一个长度至少为二的链表,其中可能存在局部的极大点或者极小点,返回极值点之间的最小距离和最大距离 思路分享 用 first 和 last 记录已经遍历到的最早和最晚的极值点,那么最大距离就是这两个之差,但是最小距离需要实时计算,每次可以拿新的极值点与 last 做差更新。 https://leetcode.cn/problems/find-the-minimum-and-maximum-number-of-nodes-between-critical-points/solutions/1075991/go-mo-ni-bian-li-lian-biao-bian-li-lin-j-rx9s/ 代码解答(强烈建议自行解答后再看) 参考题解 123456789101112131415161718192021# Definition for singly-linked list.# class ListNode:# def __init__(self, val=0, next=None):# ...

2025-11-27
【Leetcode Daily】2181合并零之间的节点
题目浅析 想查看原题可以点击题目链接。 简单地说,就是给一个链表,将其中两个为零的节点之间的节点合成一个节点,节点和为其值。 思路分享 我的思路是单指针遍历节点,将遇到非零值纳入新链表;灵茶山艾府的方法是双指针,一个指针指第一个 0,另一个指针向后遍历,遇到的非零值加到第一个指针上,遇到零则更新第一个指针到第二个指针的位置,直接原地修改。 https://leetcode.cn/problems/merge-nodes-in-between-zeros/ 代码解答(强烈建议自行解答后再看) 参考题解 123456789101112131415161718192021222324252627282930313233# Definition for singly-linked list.# class ListNode:# def __init__(self, val=0, next=None):# self.val = val# self.next = nextclass Solution: def...
公告
希望你我都能得偿所愿
PS:相对流水账的文章只能在归档找得到
系列文章
