Re: [閒聊] 每日LeetCode

作者: Rushia (みけねこ的鼻屎)   2024-02-25 16:08:00
https://leetcode.com/problems/greatest-common-divisor-traversal/description
2709. Greatest Common Divisor Traversal
給你一個陣列 nums,如果 GCD(nums[i], nums[j]) > 1 表示 i 可以走到 j,求出是否
可以從任意 i 做為起點走到所有 nums。
思路:
1.要判斷 i 是不是可以走到所有 j 就是判斷 i 和 j 做為點是否連通,可以用併查集去
判斷。
2.一開始只能想到O(n^2)的解法(遍歷所有 (i, j) 檢查GCD,然後併查集的點 merge
),但是測資超大很明顯會TLE,果斷看hint。
3.hint建議我們把 nums 裡面的數字的質數都找出來,如果 GCD(nums[i], nums[j]) > 1
表示他們存在共同質數,我們可以先遍歷一次 nums 找出最大數字,然後建質數表。
4.有兩個 corner case可以先處理,一個是 n == 1 一定連通,另一個是 nums[i] = 1 一
定不連通(GCD一定 <= 1)。
5.建立一個併查集和一個SET,SET用來記錄質數表哪些數字在 nums 裡面。
6.遍歷質數表,如果遇到當前數字在 nums 裡面,就把 nums[i] 的質數 merge 起來。
7.檢查所有 nums[i] 的質數是不是彼此都連通,是的話 true 否則 false。
Java Code:
作者: sustainer123 (caster)   2024-02-25 16:14:00
大師
作者: oin1104 (是oin的說)   2024-02-25 16:19:00
嗚嗚嗚哇哇哇 我去台北都沒做每日 我要花錢了
作者: sustainer123 (caster)   2024-02-25 16:23:00
我這個月重刷75 每日好像做不到5題:000
作者: wu10200512 (廷廷)   2024-02-25 18:23:00
我現在還沒寫出來 一直超時

Links booklink

Contact Us: admin [ a t ] ucptt.com