文章目录

  • 一【题目类别】
  • 二【题目难度】
  • 三【题目编号】
  • 四【题目描述】
  • 五【题目示例】
  • 六【题目提示】
  • 七【解题思路】
  • 八【时间频度】
  • 九【代码实现】
  • 十【提交结果】

一【题目类别】

二【题目难度】

  • 中等

三【题目编号】

  • 1042.不邻接植花

四【题目描述】

  • 有 n 个花园,按从 1 到 n 标记。另有数组 paths ,其中 paths[i] = [xi, yi] 描述了花园 xi 到花园 yi 的双向路径。在每个花园中,你打算种下四种花之一。
  • 另外,所有花园 最多 有 3 条路径可以进入或离开.
  • 你需要为每个花园选择一种花,使得通过路径相连的任何两个花园中的花的种类互不相同。
  • 以数组形式返回 任一 可行的方案作为答案 answer,其中 answer[i] 为在第 (i+1) 个花园中种植的花的种类。花的种类用 1、2、3、4 表示。保证存在答案。

五【题目示例】

  • 示例 1:
    输入:n = 3, paths = [[1,2],[2,3],[3,1]]
    输出:[1,2,3]
    解释:
    花园 1 和 2 花的种类不同。
    花园 2 和 3 花的种类不同。
    花园 3 和 1 花的种类不同。
    因此,[1,2,3] 是一个满足题意的答案。其他满足题意的答案有 [1,2,4]、[1,4,2] 和 [3,2,1]
  • 示例 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]

六【题目提示】

  • 1 < = n < = 104 1 <= n <= 104 1<=n<=104
  • 0 < = p a t h s . l e n g t h < = 2 ∗ 104 0 <= paths.length <= 2 * 104 0<=paths.length<=2∗104
  • p a t h s [ i ] . l e n g t h = = 2 paths[i].length == 2 paths[i].length==2
  • 1 < = x i , y i < = n 1 <= xi, yi <= n 1<=xi,yi<=n
  • x i ! = y i xi != yi xi!=yi
  • 每 个 花 园 最 多 有 3 条 路 径 可 以 进 入 或 离 开 每个花园 最多 有 3 条路径可以进入或离开 每个花园最多有3条路径可以进入或离开

七【解题思路】

  • 建立无向图的关系,使用布尔类型的数组存放当前花色是否被使用过,遍历每个结点的邻接结点,把邻接结点的标志位的花色置为已经使用,每次遍历都找没有使用过的花色给当前的花园

八【时间频度】

  • 时间复杂度:时间复杂度应该是 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∗邻接结点的个数)不太确定,如果是后者的话就没法计算

九【代码实现】

  1. Java语言版
package Graph;import java.util.*;public class p1042_FlowerPlantingWithNoAdjacent {public static void main(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));}public static int[] gardenNoAdj(int N, int[][] paths) {// 初始化花园,使用map保存花园与其邻接花园的关系Map<Integer, Set<Integer>> graph = new HashMap<>();// 有几个花园就生成几个HashMaofor (int i = 0; i < N; i++) {graph.put(i, new HashSet<>());}// 生成每个花园的各边关系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 = new int[N];for (int i = 0; i < N; i++) {// 使用一个boolean的数组,判断当前花园是否使用这种花boolean[] used = new boolean[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;}}
  1. C语言版
#include<stdio.h>
#include<stdlib.h>
#include<stdint.h>/*花园结构体*/
struct node
{int paths[4];int path_num;int color;
};int* gardenNoAdj(int N, int** paths, int pathsSize, int* pathColSize, int* returnSize)
{if (N == 0){*returnSize = 0;return NULL;}int *res = (int *)malloc(sizeof(int) * N);memset(res, 0, sizeof(int) * N);struct node *Nodes = (struct node *)malloc(sizeof(struct node) * N);/*构造邻接矩阵*/for (int i = 0; i < pathsSize; i++){int start = paths[i][0] - 1;int end = paths[i][1] - 1;Nodes[start].paths[Nodes[start].path_num] = end;Nodes[start].path_num++;Nodes[end].paths[Nodes[end].path_num] = start;Nodes[end].path_num++;}/*填充颜色*/for (int i = 0; i < N; i++){int set[4] = { 1,-1,-1,-1 };for (int path_i = 0; path_i < Nodes[i].path_num; path_i++){int n_path = Nodes[i].paths[path_i];/*这个颜色不能有*/if (res[n_path] != 0){set[res[n_path] - 1] = 0;}}/*上色*/for (int j = 0; j < 4; j++){if (set[j] == -1){res[i] = j + 1;break;}}}*returnSize = N;return res;
}/*主函数省略*/

十【提交结果】

  1. Java语言版
  2. C语言版

【LeetCode每日一题】——1042.不邻接植花相关推荐

  1. 0416 leetcode每日一题 1042. 不邻接植花

    题目描述: 力扣 思路: 从题目描述中可知,花的种类一共有四种,且一定有满足题意的答案. 可以首先将所有花园中的花设置为0,然后遍历与其相邻的花园,选择没有使用过的花的种类(1 2 3 4),将该花园 ...

  2. Leetcode 1042. 不邻接植花 图染色

    原题链接:Leetcode 1042. 不邻接植花 class Solution {public:vector<int> gardenNoAdj(int n, vector<vect ...

  3. LeetCode 1042. 不邻接植花(图的数据结构)

    1. 题目 有 N 个花园,按从 1 到 N 标记.在每个花园中,你打算种下四种花之一. paths[i] = [x, y] 描述了花园 x 到花园 y 的双向路径. 另外,没有花园有 3 条以上的路 ...

  4. 1042. 不邻接植花

    有 N 个花园,按从 1 到 N 标记.在每个花园中,你打算种下四种花之一. paths[i] = [x, y] 描述了花园 x 到花园 y 的双向路径. 另外,没有花园有 3 条以上的路径可以进入或 ...

  5. leetcode每日刷题计划-简单篇day8

    leetcode每日刷题计划-简单篇day8 今天是纠结要不要新买手机的一天QAQ想了想还是算了吧,等自己赚钱买,加油 Num 70 爬楼梯 Climbing Stairs class Solutio ...

  6. Leetcode每日一题:171.excel-sheet-column-number(Excel表列序号)

    思路:就是168题的反命题,进制的方式完美解决: Leetcode每日一题:168.excel-sheet-column-title(Excel表名称) class Solution {public: ...

  7. 【LeetCode每日一题】1723. 完成所有工作的最短时间

    [LeetCode每日一题]1723. 完成所有工作的最短时间 [1] 1723. 完成所有工作的最短时间 [2] 473. 火柴拼正方形 [1] 1723. 完成所有工作的最短时间 题目: 给你一个 ...

  8. leetcode每日一题--雀巢原理;抽屉算法;Quorum机制;分布式应用

    leetcode每日一题 539. 最小时间差 示例 1: 输入:timePoints = ["23:59","00:00"] 输出:1 示例 2: 输入:ti ...

  9. LeetCode每日一题——1812. 判断国际象棋棋盘中一个格子的颜色

    LeetCode每日一题系列 题目:1812. 判断国际象棋棋盘中一个格子的颜色 难度:简单 文章目录 LeetCode每日一题系列 题目 示例 思路 题解 题目 给你一个坐标 coordinates ...

最新文章

  1. MMA冠军Rory MacDonald:比特币现金(BCH)是真正的比特币
  2. Linux搜索查找命令合集
  3. 浅谈APP流式分页服务端设计(转)
  4. 利用python进行数据分析D1——ch02引言
  5. Unity的匹配系统
  6. 算法题存档20191223
  7. 2022春节档新片预售总票房达1.08亿
  8. php中函数的使用方法,php中header()函数的使用方法
  9. 编译调试Apache HTTP Server
  10. Thymeleaf-extras-Spring Security 权限控制
  11. 写个批处理脚本来帮忙干活--遍历文件夹字符串处理
  12. 视频教程-Excel函数教程(上)-Office/WPS
  13. 非平衡载流子和pn结
  14. STM32CubeMX | 36 - 使用CAN总线进行双板通信(TJA1050)
  15. android adapter 组件,Android UI - AdapterView 及其子类
  16. 论如何使用Python进行微信公众号的开发
  17. 编写一个抽象类Shape,声明计算图形面积的抽象方法。再分别定义Shape的子类Circle(圆)和Rectangle(矩形),在两个子类中按照不同图形的面积计算公式,实现Shape类中计算面积的方法
  18. 语音信号处理(一):对声母和韵母进行录音并时域分析
  19. 本地php开发环境出现 cURL error 60
  20. TypeError: expected Tensor as element 0 in argument 0, but got numpy.ndarray解决办法

热门文章

  1. 4:3 背景图片素材
  2. SQLserver 外键语句出现“引用了无效的表”
  3. 3D万花筒无限延伸动画特效(源码)
  4. 根据银行卡号来获取银行名称-java
  5. 西瓜书习题 - 8.集成学习
  6. 张召忠:第四次工业革命来了》课堂笔记
  7. 百趣代谢组学资讯:@熬夜的年轻人代谢紊乱急救包-喝普洱茶!
  8. 新手蓝牙耳机选购攻略,2021什么牌子蓝牙耳机不容易踩雷
  9. python爬取图片失败显示404_django使用图片延时加载引起后台404错误
  10. 【LTspice】【使用.step命令对LTspice电路进行对比分析】