Re: [閒聊] 每日leetcode已回收

看板Marginalman作者 (神楽めあ的錢包)時間1年前 (2024/03/25 18:15), 編輯推噓0(007)
留言7則, 7人參與, 1年前最新討論串70/1548 (看更多)
幹你老師,打到一半閃退,全部都不見了 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 } -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 42.72.109.58 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Marginalman/M.1711361734.A.118.html

03/25 18:16, 1年前 , 1F
大師
03/25 18:16, 1F

03/25 18:16, 1年前 , 2F
大師
03/25 18:16, 2F

03/25 18:16, 1年前 , 3F
大師
03/25 18:16, 3F

03/25 18:19, 1年前 , 4F
大師
03/25 18:19, 4F

03/25 18:29, 1年前 , 5F
大師
03/25 18:29, 5F

03/25 18:33, 1年前 , 6F
大師
03/25 18:33, 6F

03/25 18:43, 1年前 , 7F
第一個不行吧
03/25 18:43, 7F
文章代碼(AID): #1c0Kx64O (Marginalman)
討論串 (同標題文章)
文章代碼(AID): #1c0Kx64O (Marginalman)