Re: [闲聊] 每日leetcode

楼主: JIWP (JIWP)   2024-03-25 18:15:32
干你老师,打到一半闪退,全部都不见了
287. Find the Duplicate Number
有一个矩阵nums,长度为n+1,矩阵元素大小介于[1,n]
矩阵内有一个数字会重复出现,请问该数字是多少?
题目限制:不能修改原本的矩阵、只能使用constant extra space
思路
1.用一个大小为n的矩阵去纪录每个数字出现的频率,出现超过1次的就是答案
2.用二分搜寻法,去寻找值小于等于中间值m=1+(n-1)/2的元素个数(cnt)
(1)如果cnt<=m,代表重复的值在m+1~n
(2)如果cnt>m,代表重复的值在1~m
就这样一直重复下去就能找到答案了
3.用bit manupulation,计算nums内的元素第i个bit为1的数量(a)
以及1~n在第1个bit为1个数量(b)
若a>b则重复的数字的第i个bit为1反之为0
4.因为只有一个数字重复所以会存在一个环,用快慢指标的概念,去寻找环的起点
这个比较难解释,建议去看影片,比较好理解
golang code
func findDuplicate(nums []int) int {
ptr1,ptr2:=0,0
for{
ptr1=nums[ptr1]
ptr2=nums[nums[ptr2]]
if ptr1==ptr2{
break
}
}
ptr1=0
for ptr1!=ptr2{
ptr1=nums[ptr1]
ptr2=nums[ptr2]
}
return ptr1
}
作者: JenniferLope (ㄚ)   2024-03-25 18:16:00
大师
作者: digua (地瓜)   2024-03-25 18:16:00
大师
作者: yam276 ('_')   2024-03-25 18:16:00
大师
作者: wwndbk (黑人问号)   2024-03-25 18:19:00
大师
作者: oinishere (是oin捏)   2024-03-25 18:29:00
大师
作者: sustainer123 (caster)   2024-03-25 18:33:00
大师
作者: Rushia (みけねこ的鼻屎)   2024-03-25 18:43:00
第一个不行吧

Links booklink

Contact Us: admin [ a t ] ucptt.com