图题目:不邻接植花

文章目录

  • 题目
    • 标题和出处
    • 难度
    • 题目描述
      • 要求
      • 示例
      • 数据范围
  • 解法
    • 思路和算法
    • 代码
    • 复杂度分析

题目

标题和出处

标题:不邻接植花

出处:1042. 不邻接植花

难度

4 级

题目描述

要求

n \texttt{n} n 个花园,从 1 \texttt{1} 1 n \texttt{n} n 编号,以及数组 paths \texttt{paths} paths,其中 paths[i]   =   [x i ,   y i ] \texttt{paths[i] = [x}_\texttt{i}\texttt{, y}_\texttt{i}\texttt{]} paths[i] = [xi, yi] 描述了花园 x i \texttt{x}_\texttt{i} xi 到花园 y i \texttt{y}_\texttt{i} yi 的双向路径。在每个花园中,你打算种下四种花之一。

所有花园最多 3 \texttt{3} 3 条路径可以进入或离开.

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

以数组形式返回任一可行的方案作为答案 answer \texttt{answer} answer,其中 answer[i] \texttt{answer[i]} answer[i] 为在第 i   +   1 \texttt{i + 1} i + 1 个花园中种植的花的种类。花的种类用 1 \texttt{1} 1 2 \texttt{2} 2 3 \texttt{3} 3 4 \texttt{4} 4 表示。保证存在答案。

示例

示例 1:

输入: n   =   3,   paths   =   [[1,2],[2,3],[3,1]] \texttt{n = 3, paths = [[1,2],[2,3],[3,1]]} n = 3, paths = [[1,2],[2,3],[3,1]]
输出: [1,2,3] \texttt{[1,2,3]} [1,2,3]
解释:
花园 1 \texttt{1} 1 2 \texttt{2} 2 花的种类不同。
花园 2 \texttt{2} 2 3 \texttt{3} 3 花的种类不同。
花园 3 \texttt{3} 3 1 \texttt{1} 1 花的种类不同。
因此, [1,2,3] \texttt{[1,2,3]} [1,2,3] 是一个满足题意的答案。其他满足题意的答案有 [1,2,4] \texttt{[1,2,4]} [1,2,4] [1,4,2] \texttt{[1,4,2]} [1,4,2] [3,2,1] \texttt{[3,2,1]} [3,2,1]

示例 2:

输入: n   =   4,   paths   =   [[1,2],[3,4]] \texttt{n = 4, paths = [[1,2],[3,4]]} n = 4, paths = [[1,2],[3,4]]
输出: [1,2,1,2] \texttt{[1,2,1,2]} [1,2,1,2]

示例 3:

输入: n   =   4,   paths   =   [[1,2],[2,3],[3,4],[4,1],[1,3],[2,4]] \texttt{n = 4, paths = [[1,2],[2,3],[3,4],[4,1],[1,3],[2,4]]} n = 4, paths = [[1,2],[2,3],[3,4],[4,1],[1,3],[2,4]]
输出: [1,2,3,4] \texttt{[1,2,3,4]} [1,2,3,4]

数据范围

  • 1 ≤ n ≤ 10 4 \texttt{1} \le \texttt{n} \le \texttt{10}^\texttt{4} 1n104
  • 0 ≤ paths.length ≤ 2 × 10 4 \texttt{0} \le \texttt{paths.length} \le \texttt{2} \times \texttt{10}^\texttt{4} 0paths.length2×104
  • paths[i].length = 2 \texttt{paths[i].length} = \texttt{2} paths[i].length=2
  • 1 ≤ x i ,   y i ≤ n \texttt{1} \le \texttt{x}_\texttt{i}\texttt{, y}_\texttt{i} \le \texttt{n} 1xi, yin
  • x i ≠ y i \texttt{x}_\texttt{i} \ne \texttt{y}_\texttt{i} xi=yi
  • 每个花园最多 3 \texttt{3} 3 条路径可以进入或离开

解法

思路和算法

同一条路径连接的两个花园为相邻花园,则任意两个相邻花园中的花的种类互不相同。由于有 4 4 4 种花,每个花园最多有 3 3 3 个相邻的花园,因此一定存在答案。

为了确保相邻花园中的花的种类互不相同,需要遍历所有的路径,得到每个花园的相邻花园,然后按照编号从 1 1 1 n n n 的顺序依次遍历每个花园并决定每个花园中的花的种类。由于遍历花园的顺序是按照编号递增顺序,因此记录每个花园的相邻花园时只需要记录比当前花园的编号小的相邻花园。当遍历到一个花园时,比当前花园的编号小的所有花园都已经决定了花园中的花的种类。

遍历花园的过程中,对于每个花园,得到与当前花园相邻且编号比当前花园的编号小的全部花园,这些花园中的花的种类都已知,称为相邻花的种类。默认当前花园中的花的种类是 1 1 1,如果花的种类在相邻花的种类中出现,则将花的种类加 1 1 1,直到花的种类不在相邻花的种类中出现,则可确定当前花园中的花的种类。

遍历结束时,即可得到一个满足相邻花园中的花的种类互不相同的答案。

代码

class Solution {
    public int[] gardenNoAdj(int n, int[][] paths) {
        List<Integer>[] adjacentGardens = new List[n];
        for (int i = 0; i < n; i++) {
            adjacentGardens[i] = new ArrayList<Integer>();
        }
        for (int[] path : paths) {
            int garden0 = path[0] - 1, garden1 = path[1] - 1;
            if (garden0 < garden1) {
                adjacentGardens[garden1].add(garden0);
            } else {
                adjacentGardens[garden0].add(garden1);
            }
        }
        int[] answer = new int[n];
        for (int i = 0; i < n; i++) {
            List<Integer> adjacent = adjacentGardens[i];
            boolean[] used = new boolean[5];
            for (int garden : adjacent) {
                int adjacentType = answer[garden];
                used[adjacentType] = true;
            }
            int type = 1;
            while (used[type]) {
                type++;
            }
            answer[i] = type;
        }
        return answer;
    }
}

复杂度分析

  • 时间复杂度: O ( n ) O(n) O(n),其中 n n n 是花园数。需要遍历每条路径一次,得到每个花园的相邻花园,然后遍历每个花园一次,对于每个花园使用 O ( 1 ) O(1) O(1) 的时间确定花的种类。由于每个花园最多和 3 3 3 个花园相邻,因此路径数是 O ( n ) O(n) O(n),确定一个花园中的花的种类的时间是 O ( 1 ) O(1) O(1),时间复杂度是 O ( n ) O(n) O(n)

  • 空间复杂度: O ( n ) O(n) O(n),其中 n n n 是花园数。需要记录每个花园的相邻花园。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/589311.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

一文全面了解 wxWidgets 布局器(Sizers)

目录 Sizers背后的理念 共同特征 最小大小 边框 对齐方式 伸缩因子 使用 Sizer 隐藏控件 wxBoxSizer wxStaticBoxSizer wxGridSizer wxFlexGridSizer 布局器&#xff08;Sizers&#xff09;&#xff0c;由wxWidgets类层次结构中的wxSizer类及其派生类表示&#xff0…

电商核心技术揭秘四十五:营销与广告策略(下)

相关系列文章 电商技术揭秘相关系列文章合集&#xff08;1&#xff09; 电商技术揭秘相关系列文章合集&#xff08;2&#xff09; 电商技术揭秘相关系列文章合集&#xff08;3&#xff09; 电商技术揭秘四十一&#xff1a;电商平台的营销系统浅析 电商技术揭秘四十二&#…

苹果可能将OpenAI技术集成至iOS/iPadOS 18

&#x1f989; AI新闻 &#x1f680; 苹果可能将OpenAI技术集成至iOS/iPadOS 18 摘要&#xff1a;苹果正在与OpenAI就将GPT技术部署在iOS/iPadOS 18中进行谈判。这项技术被视为可能增强的Siri功能&#xff0c;即“AI聊天机器人”。除Siri外&#xff0c;新技术还可能改善Spotl…

mac idea 下载spring 源码遇到的问题

一、Kotlin: warnings found and -Werror specified 这个问题网上看了很多文章多说是缺少cglib、objenesis包。然后执行了 实际还是没有什么用 解决&#xff1a; 最后自己看了一下前面一个警告。说的就是版本太低。所以我觉得是这个前置问题导致的 然后搜索了改这个Kotlin版本…

在Mac上恢复已删除文件夹的最佳方法

“嗨&#xff0c;我从我的Mac Documents文件夹中删除了很多文件夹。已删除的文件夹包含我的重要文档和文件&#xff0c;是否可以取回它们&#xff1f;垃圾桶已被清洁软件清空。如何在我的Mac上恢复已删除的文件夹&#xff1f; 当您在 Mac 上删除 1 或 2 个文件夹时&#xff0c…

免费开源语音克隆-GPT-SoVITS-WebUI只需 5 秒的声音样本

语音克隆-GPT-SoVITS-WebUI 强大的少样本语音转换与语音合成Web用户界面。 功能&#xff1a; 零样本文本到语音&#xff08;TTS&#xff09;&#xff1a; 输入 5 秒的声音样本&#xff0c;即刻体验文本到语音转换。 少样本 TTS&#xff1a; 仅需 1 分钟的训练数据即可微调模型…

抖音小店运营实战班,全新升级 从零到进阶精通 分享月销百万小店核心秘密

课程内容&#xff1a; 1 2024抖音电商发展趋势及抖店运营策略(直播2024 0412).mp4 2 1-1抖音小店入驻流程(直播2024 04 12),mp4 3 1-2个体店铺VS企业店铺有什么区别(直播20240412).mp4 4 1-3抖音小店店铺搭建(直播2024 04 12).mp4 5 2-1-如何避免违禁词(附违禁词大全)(直播…

设计模式之模板模式

模板模式&#xff08;Template Method Pattern&#xff09;是行为设计模式之一&#xff0c;它定义了一个操作中的算法骨架&#xff0c;而将一些步骤延迟到子类中实现。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤&#xff0c;从而达到复用算法框架…

每日一题(力扣213):打家劫舍2--dp+分治

与打家劫舍1不同的是它最后一个和第一个会相邻&#xff0c;事实上&#xff0c;从结果思考&#xff0c;最后只会有三种&#xff1a;1 第一家不被抢 最后一家被抢 2 第一家被抢 最后一家不被抢 3 第一和最后一家都不被抢 。那么&#xff0c;根据打家劫舍1中的算法 我们能算出在i…

蓝桥杯练习系统(算法训练)ALGO-951 预备爷的悲剧

资源限制 内存限制&#xff1a;512.0MB C/C时间限制&#xff1a;1.0s Java时间限制&#xff1a;3.0s Python时间限制&#xff1a;5.0s 问题描述 英语预备爷gzp是个逗(tu)比(hao)&#xff0c;为了在即将到来的英语的quiz中不挂科&#xff0c;gzp废寝忘食复习英语附录单词…

PAT (Advanced Level) - 1006 Sign In and Sign Out

模拟 #include <iostream> #include <cstring> #include <algorithm> using namespace std;int m; string open_id, open_time; string close_id, close_time;int main(){cin >> m;for (int i 0; i < m; i ) {string id, in_time, out_time;cin …

深度学习:基于Keras,使用长短期记忆人工神经网络模型(LSTM)对股票市场进行预测分析

前言 系列专栏&#xff1a;机器学习&#xff1a;高级应用与实践【项目实战100】【2024】✨︎ 在本专栏中不仅包含一些适合初学者的最新机器学习项目&#xff0c;每个项目都处理一组不同的问题&#xff0c;包括监督和无监督学习、分类、回归和聚类&#xff0c;而且涉及创建深度学…

Unity开发一个FPS游戏之四

在前面的系列中&#xff0c;我已介绍了如何实现一个基本的FPS游戏&#xff0c;这里将继续进行完善&#xff0c;主要是增加更换武器以及更多动作动画的功能。 之前我是采用了网上一个免费的3D模型来构建角色&#xff0c;这个模型自带了一把AR自动步枪&#xff0c;并且自带了一些…

链表经典面试题上

目录 创作不易&#xff0c;如若对您有帮助&#xff0c;还望三连&#xff0c;谢谢&#xff01;&#xff01;&#xff01; 题目一&#xff1a;203. 移除链表元素 - 力扣&#xff08;LeetCode&#xff09; 题目二&#xff1a;206. 反转链表 - 力扣&#xff08;LeetCode&#xff…

电脑如何查看一段时间内是否被人使用过?

前言 有时候我们可能会担心别人未经许可使用我们的电脑。为了确保自己不在场时电脑是否被使用过&#xff0c;以下两种方法可能会帮到你 第一种方法 WinX打开事件查看器。像WinX能快速打开很多东西&#xff0c;比如安装的应用(可以进行软件的删除)&#xff0c;设备管理器&…

网络性能测试工具iperf3 和iperf

目录 1. iperf工具介绍 2. 下载安装 3. 使用方法 1. iperf工具介绍 iperf 是一个网络性能测试工具&#xff0c;用于测量网络带宽和性能。它可以在客户端和服务器之间进行数据传输&#xff0c;并提供了丰富的选项来配置测试参数和输出格式。 iperf 和 iperf3 都是用于测量网…

什么是发售?

什么是发售? 很多人不知道什么是发售,因为这个词刚被广而告之,在这里普及一下什么是发售? 发售,它是通过一套流程,把你的产品疯狂大卖的一种技术。通常有三个步骤,就是造势、预售、发售。那么这三个词怎么理解呢? 第一步:造势 造势的核心是引发关注,但是不做销售…

【机器视觉】Segment Anything模型(SAM) C# 推理

Facebook开源的Segment Anything是一个基于大型预训练模型的计算机视觉工具&#xff0c;它使用一种新的范式来处理图像分割任务。这个范式不依赖于传统的预训练加微调&#xff08;pretrainfinetune&#xff09;方法&#xff0c;而是通过提示&#xff08;prompt&#xff09;加上…

关于我转生从零开始学C++这件事:升级Lv.10

❀❀❀ 文章由不准备秃的大伟原创 ❀❀❀ ♪♪♪ 若有转载&#xff0c;请联系博主哦~ ♪♪♪ ❤❤❤ 致力学好编程的宝藏博主&#xff0c;代码兴国&#xff01;❤❤❤ 盘古开天辟地&#xff0c;大伟五一更新。大家好哇&#xff0c;大伟今天继续给大家来更新我们的C&#xff1a;…

Redis---------实现查询缓存业务

目录 数据库与缓存之间的工作业务逻辑&#xff1a; 接下来看查询缓存代码实现&#xff0c;主要是捋清楚业务逻辑&#xff0c;代码实现是死的&#xff1a; Controller: Service: P37作业实现&#xff1a;总体逻辑跟上面的业务逻辑差不多 Controller&#xff1a; Service&#…
最新文章