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://m.huajiangbk.com/newsview1786884.html
上一篇: JS输出所有的3位水仙花数 |
下一篇: 605. Can Place F |