时间复杂度:时间复杂度应该是
O
(
N
+
p
a
t
h
s
.
l
e
n
g
t
h
)
O(N+paths.length)
O(N+paths.length)还是
O
(
N
∗
邻
接
结
点
的
个
数
)
O(N*邻接结点的个数)
O(N∗邻接结点的个数)不太确定,如果是后者的话就没法计算
九【代码实现】
Java语言版
package Graph;import java.util.*;publicclassp1042_FlowerPlantingWithNoAdjacent{publicstaticvoidmain(String[] args){int N =3;int[][] paths ={{1,2},{2,3},{3,1},};int[] res =gardenNoAdj(N, paths);
System.out.println("res = "+ Arrays.toString(res));}publicstaticint[]gardenNoAdj(int N,int[][] paths){// 初始化花园,使用map保存花园与其邻接花园的关系
Map<Integer, Set<Integer>> graph =newHashMap<>();// 有几个花园就生成几个HashMaofor(int i =0; i < N; i++){
graph.put(i,newHashSet<>());}// 生成每个花园的各边关系for(int[] path : paths){int a = path[0]-1;int b = path[1]-1;
graph.get(a).add(b);
graph.get(b).add(a);}// 定义结果数组,有几个花园数组就多大int[] res =newint[N];for(int i =0; i < N; i++){// 使用一个boolean的数组,判断当前花园是否使用这种花boolean[] used =newboolean[5];// 查看当前花园每个邻接花园的状态for(int adj : graph.get(i)){
used[res[adj]]=true;}// 给当前花园染色,因为有四种花,所以从1开始,4结束for(int j =1; j <4; j++){// 说明当前花园可以使用这种花,就把当前花园的花置为当前花if(!used[j]){
res[i]= j;}}}return res;}}