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