0416 leetcode每日一题 1042. 不邻接植花
题目描述:
力扣
思路:
从题目描述中可知,花的种类一共有四种,且一定有满足题意的答案。
可以首先将所有花园中的花设置为0,然后遍历与其相邻的花园,选择没有使用过的花的种类(1 2 3 4),将该花园设置成对应的花朵即可。
java语言:
class Solution {public int[] gardenNoAdj(int n, int[][] paths) {//使用hashmap存储相邻花园。HashMap<Integer, ArrayList<Integer>> map = new HashMap<>();for(int i = 0; i < paths.length; i++) {ArrayList<Integer> list1 = map.getOrDefault(paths[i][0], new ArrayList<Integer>());list1.add(paths[i][1]);map.put(paths[i][0], list1);ArrayList<Integer> list2 = map.getOrDefault(paths[i][1], new ArrayList<Integer>());list2.add(paths[i][0]);map.put(paths[i][1], list2);}int[] res = new int[n];res[0] = 1;for(int i = 1; i < n; i++) {int[] flag = new int[5];ArrayList<Integer> list = map.getOrDefault(i+1, new ArrayList<Integer>());//遍历相邻花园,将已经设置过的花的种类进行标记。for(int j = 0; j < list.size(); j++) {flag[res[list.get(j)-1]] = 1;}//选择没有用过的花对该花园进行标记。for(int j = 1; j <= 4; j++) {if(flag[j] == 0) {res[i] = j;break;}}}return res;}
}
js语言:
/* @param {number} n* @param {number[][]} paths* @return {number[]}*/
var gardenNoAdj = function(n, paths) {let map = new Map();for(let i = 0; i < paths.length; i++) {let list1 = [];if(map.has(paths[i][0])) {list1 = map.get(paths[i][0]);}list1.push(paths[i][1]);map.set(paths[i][0], list1);let list2 = [];if(map.has(paths[i][1])) {list2 = map.get(paths[i][1]);}list2.push(paths[i][0]);map.set(paths[i][1],list2);}let res = new Array(n);res.fill(0);res[0] = 1;for(let i = 1; i < n; i++) {let flag = new Array(5);let list = []if(map.has(i+1)) {list = map.get(i+1);}for(let j = 0; j < list.length; j++) {flag[res[list[j]-1]] = 1;}for(let j = 1; j <= 4; j++) {if(flag[j] !== 1) {res[i] = j;break;}}}return res;
};