首页 分享 【每日一题Day178】LC1042不邻接植花

【每日一题Day178】LC1042不邻接植花

来源:花匠小妙招 时间:2025-04-23 18:55

2023-12-27 79 发布于吉林

版权

举报

版权声明:

本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《 阿里云开发者社区用户服务协议》和 《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写 侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

简介: 【每日一题Day178】LC1042不邻接植花 | 位运算 + 枚举

不邻接植花【LC1042】

有 n 个花园,按从 1 到 n 标记。另有数组 paths ,其中 paths[i] = [xi, yi] 描述了花园 xi 到花园 yi 的双向路径。在每个花园中,你打算种下四种花之一。

另外,所有花园 最多3 条路径可以进入或离开.

你需要为每个花园选择一种花,使得通过路径相连的任何两个花园中的花的种类互不相同。

以数组形式返回 任一 可行的方案作为答案 answer,其中 answer[i] 为在第 (i+1) 个花园中种植的花的种类。花的种类用 1、2、3、4 表示。保证存在答案。

没有周末的周末

思路
先构造邻接矩阵,然后枚举每一个节点,找到和它相邻的节点能够用的花园的最小值。

使用状态压缩mask记录每种花的使用情况,第i位为1时表示第i ii种花已经使用。

小技巧:花园的值为mask从低到高第一个0的位置,即计算mask取反后尾零个数

Integer.numberOfTrailingZeros(~mask);

AI 代码解读

实现

class Solution { public int[] gardenNoAdj(int n, int[][] paths) { List<Integer>[] g = new List[n]; int[] res = new int[n]; Arrays.setAll(g, e -> new ArrayList<>()); for (int[] path : paths){ int u = path[0] - 1, v = path[1] - 1; g[u].add(v); g[v].add(u); } for (int i = 0; i < n; i++){ int mask = 0;// 记录相连的花的使用情况 for (int j : g[i]){ mask |= (1 << res[j]); } res[i] = Integer.numberOfTrailingZeros(~mask); /*for (int k = 1; k <= 4; k++){ if (((mask >> k) & 1) == 0){ res[i] = k; break; } }*/ } return res; } }

AI 代码解读

目录

打赏

0

0

0

5

相关文章

热门文章

最新文章

目录

相关知识

每日一题
每日一题(九)
支付宝蚂蚁庄园4月19日每日一题 无花果为什么被叫做无花果
4月13日蚂蚁庄园每日一题
王者荣耀1月13日每日一题 绒花工艺相传始于什么朝代
一朵向日葵花能结多少葵花籽 第五人格每日一题答案
春天随风飘扬的白色柳絮其实是柳树的 蚂蚁庄园5月27日每日一题答案
【每日一题】(190)肯尼亚鲜花种植
每日一题|保护生态环境,这些法律法规需牢记!
将买来的鲜花插在可乐中,能延长花期吗 蚂蚁庄园7月11日每日一题答案

网址: 【每日一题Day178】LC1042不邻接植花 https://www.huajiangbk.com/newsview1786884.html

所属分类:花卉
上一篇: JS输出所有的3位水仙花数
下一篇: 605. Can Place F

推荐分享