【每日一题Day178】LC1042不邻接植花
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 |
推荐分享

- 1君子兰什么品种最名贵 十大名 4012
- 2世界上最名贵的10种兰花图片 3364
- 3花圈挽联怎么写? 3286
- 4迷信说家里不能放假花 家里摆 1878
- 5香山红叶什么时候红 1493
- 6花的意思,花的解释,花的拼音 1210
- 7教师节送什么花最合适 1167
- 8勿忘我花图片 1103
- 9橄榄枝的象征意义 1093
- 10洛阳的市花 1039