不邻接植花(leetcode)

有 N 个花园,按从 1 到 N 标记。在每个花园中,你打算种下四种花之一。

paths[i] = [x, y] 描述了花园 x 到花园 y 的双向路径。

另外,没有花园有 3 条以上的路径可以进入或者离开。

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

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

示例 1:

输入:N = 3, paths = [[1,2],[2,3],[3,1]]
输出:[1,2,3]
示例 2:

输入:N = 4, paths = [[1,2],[3,4]]
输出:[1,2,1,2]
示例 3:

输入:N = 4, paths = [[1,2],[2,3],[3,4],[4,1],[1,3],[2,4]]
输出:[1,2,3,4]

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/flower-planting-with-no-adjacent
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明

public int[] gardenNoAdj(int N, int[][] paths) {
        Map<Integer, Set<Integer>> map = new HashMap<Integer, Set<Integer>>();
        /**建立邻接HashMap*/
        for(int i = 1; i <= N; i++) {
            map.put(i, new HashSet<Integer>());
        }
        for(int[] path : paths) {
            map.get(path[0]).add(path[1]);
            map.get(path[1]).add(path[0]);
        }
        int[] res = new int[N];
        for(int i = 1; i <= N; i++) {
            boolean[] used = new boolean[4 + 1];
            for (int node : map.get(i)) {
                used[res[node - 1]] = true;
            }
            for (int j = 1; j <= 4; j++) {
                if (!used[j]) {
                    res[i - 1] = j;
                }
            }
        }
        return res;
    }

  

原文地址:https://www.cnblogs.com/wangyu19900123/p/12147209.html

时间: 2024-09-29 23:38:00

不邻接植花(leetcode)的相关文章

Leetcode-5056 Flower Planting With No Adjacent(不邻接植花)

1 #define _for(i,a,b) for(int i = (a);i < b;i ++) 2 3 int n,m; 4 5 class Solution 6 { 7 public: 8 int color[10000]; 9 vector<vector<int>> a; 10 bool OK(int t) 11 { 12 for(int j=0; j<a[t].size(); j++) 13 { 14 // if(a[t][j]) 15 // { 16 if(

情不知所起,一“网”而深

你只看到我的程序,却没有看到背后的代码:      你有你的选择 ,我有我的坚持 :      你嘲笑我假期过节不回家陪父母,我可怜你只在家向父母衣食伸手:      你可以轻视我的道路,我会证明这是谁的时代!      编程是注定孤独的旅行,路上少不了质疑和嘲笑:      但那又怎样,哪怕代码千万行,我也要让bug无处藏,编就编的漂亮.     年少初遇 常在我心 初次见面,那是一个河北的夏天,风随沙散落天涯,蝴蝶依旧恋着花,回首走过的日子,手指和键盘之间的梦想之光,已恍如昨日,那年我还是一

赤玉土、鹿沼土、仙土之刨根究底

许多多肉爱好者种植多肉的时候都很纠结颗粒土的选择,对于名目繁多的各种颗粒土更是经常搞不清楚状况,下文的作者kabutoo把赤玉土.鹿沼土.仙土挖了个老底朝天,也许可以终结你的颗粒土选择纠结症. 赤玉土 最近开始试用赤玉土了,二本线和竜泉两种都买了点试试,因为早就听说市面上假货很多,于是花大笔运费从外省一家口碑很好的老牌皇冠店买来. 掐了下二本线确实硬一点,不过也只是“轻松掐碎”和“稍微加点力掐碎”的区别,用过的颗粒里更软的只有珍珠岩和蛭石了. 20%混土(二本线竜泉),上面再一层二本线铺面,发现

[LeetCode] Can Place Flowers 可以放置花

Suppose you have a long flowerbed in which some of the plots are planted and some are not. However, flowers cannot be planted in adjacent plots - they would compete for water and both would die. Given a flowerbed (represented as an array containing 0

[leetcode]605. Can Place Flowers能放花吗

Suppose you have a long flowerbed in which some of the plots are planted and some are not. However, flowers cannot be planted in adjacent plots - they would compete for water and both would die. Given a flowerbed (represented as an array containing 0

[LeetCode]Count Primes

题目:Count Primes 统计1-n的素数的个数. 思路1: 通常的思想就是遍历(0,n)范围内的所有数,对每个数i再遍历(0,sqrt(i)),每个除一遍来判断是否为素数,这样时间复杂度为O(n*sqrt(n)). 具体实现不在贴代码,过程很简单,两重循环就可以解决.但是效率很差,n较大时甚至会花几分钟才能跑完. 思路2: 用埃拉特斯特尼筛法的方法来求素数,时间复杂度可以达到O(nloglogn). 首先开一个大小为n的数组prime[],从2开始循环,找到一个质数后开始筛选出所有非素数

刷LeetCode的正确姿势——第1、125题

最近刷LeetCode比较频繁,就购买了官方的参考电子书 (CleanCodeHandbook),里面有题目的解析和范例源代码,可以省去非常多寻找免费经验分享内容和整理这些资料的时间.惊喜的是,里面的所有源代码都是用java语言写的. 接下来的一段时间里,我会将里面的大部分内容翻译成中文,再加上一些小y自己的解法和扩展内容,以博客的形式发在博客园.我想,这会是一件非常有趣的事情. 以下是翻译的前言部分,第1.4题以及其解析部分. 前言: 嗨,各位刷LeetCode的小伙伴们. 就像你们看到这本书

LeetCode记录之9——Palindrome Number

LeetCode真是个好东西,本来闲了一下午不想看书,感觉太荒废时间了就来刷一道题.能力有限,先把easy的题目给刷完. Determine whether an integer is a palindrome. Do this without extra space. 确定一个整数是否是回文. 做这个没有额外的空间. 这道题毕竟是easy级别的,花了大概5分钟就写出来了.我的思路就是判断回文要首尾一一对照么,如果把int转换成string类型的话比较字符就方便多了. class Solutio

0505--鲜花售卖网之“NABCD模型”

一.NABCD 1) N (Need 需求)--(分析人:梁植淋) --简介 我们的鲜花售卖系统主要是给需要买花或者是养花的顾客提供一个购花平台,买花时通过位置识别给用户提供附近的花店购花,花店接到订单后可在短时间内派出送花员把花送到顾客手上. --顾客烦恼 如今人们买花的方式主要有两种,一种是在淘宝等购物平台买,还有一种就是直接去花店买,但这两种买花方式往往会给顾客们带来一些烦恼. 先说去实体花店买花顾客的烦恼,顾客们往往没有太多的时间去花店挑选花品,甚至有一些地方实体花店并不常见,如我们学校