Golang每日一练(leetDay0115) 重新安排行程、递增的三元子序列

news2024/11/27 10:23:49

 

目录

332. 重新安排行程 Reconstruct Itinerary  🌟🌟🌟

334. 递增的三元子序列 Increasing Triplet Subsequence 🌟🌟

🌟 每日一练刷题专栏 🌟

Rust每日一练 专栏

Golang每日一练 专栏

Python每日一练 专栏

C/C++每日一练 专栏

Java每日一练 专栏


332. 重新安排行程 Reconstruct Itinerary

给你一份航线列表 tickets ,其中 tickets[i] = [fromi, toi] 表示飞机出发和降落的机场地点。请你对该行程进行重新规划排序。

所有这些机票都属于一个从 JFK(肯尼迪国际机场)出发的先生,所以该行程必须从 JFK 开始。如果存在多种有效的行程,请你按字典排序返回最小的行程组合。

  • 例如,行程 ["JFK", "LGA"] 与 ["JFK", "LGB"] 相比就更小,排序更靠前。

假定所有机票至少存在一种合理的行程。且所有的机票 必须都用一次 且 只能用一次。 

示例 1:

输入:tickets = [["MUC","LHR"],["JFK","MUC"],["SFO","SJC"],["LHR","SFO"]]
输出:["JFK","MUC","LHR","SFO","SJC"]

示例 2:

输入:tickets = [["JFK","SFO"],["JFK","ATL"],["SFO","ATL"],["ATL","JFK"],["ATL","SFO"]]
输出:["JFK","ATL","JFK","SFO","ATL","SFO"]
解释:另一种有效的行程是 ["JFK","SFO","ATL","JFK","ATL","SFO"] ,但是它字典排序更大更靠后。

提示:

  • 1 <= tickets.length <= 300
  • tickets[i].length == 2
  • fromi.length == 3
  • toi.length == 3
  • fromi 和 toi 由大写英文字母组成
  • fromi != toi

代码:

package main

import (
	"fmt"
	"sort"
)

func findItinerary(tickets [][]string) []string {
	// 构建图的邻接表
	graph := make(map[string][]string)
	for _, ticket := range tickets {
		from, to := ticket[0], ticket[1]
		graph[from] = append(graph[from], to)
	}

	// 对邻接表中的目的地进行字典排序
	for _, destinations := range graph {
		sort.Strings(destinations)
	}

	// 深度优先遍历,获取行程
	var itinerary []string
	var dfs func(from string)
	dfs = func(from string) {
		for len(graph[from]) > 0 {
			to := graph[from][0]
			graph[from] = graph[from][1:]
			dfs(to)
		}
		itinerary = append(itinerary, from)
	}

	dfs("JFK")

	// 将行程逆序,得到正确顺序
	for i, j := 0, len(itinerary)-1; i < j; i, j = i+1, j-1 {
		itinerary[i], itinerary[j] = itinerary[j], itinerary[i]
	}

	return itinerary
}

func main() {
	tickets := [][]string{{"MUC", "LHR"}, {"JFK", "MUC"}, {"SFO", "SJC"}, {"LHR", "SFO"}}
	fmt.Println(findItinerary(tickets))

	tickets = [][]string{{"JFK", "SFO"}, {"JFK", "ATL"}, {"SFO", "ATL"}, {"ATL", "JFK"}, {"ATL", "SFO"}}
	fmt.Println(findItinerary(tickets))
}

输出:

[JFK MUC LHR SFO SJC]

[JFK ATL JFK SFO ATL SFO]


334. 递增的三元子序列 Increasing Triplet Subsequence

给你一个整数数组 nums ,判断这个数组中是否存在长度为 3 的递增子序列。

如果存在这样的三元组下标 (i, j, k) 且满足 i < j < k ,使得 nums[i] < nums[j] < nums[k] ,返回 true ;否则,返回 false 。

示例 1:

输入:nums = [1,2,3,4,5]
输出:true
解释:任何 i < j < k 的三元组都满足题意

示例 2:

输入:nums = [5,4,3,2,1]
输出:false
解释:不存在满足题意的三元组

示例 3:

输入:nums = [2,1,5,0,4,6]
输出:true
解释:三元组 (3, 4, 5) 满足题意,因为 nums[3] == 0 < nums[4] == 4 < nums[5] == 6

提示:

  • 1 <= nums.length <= 5 * 10^5
  • -2^31 <= nums[i] <= 2^31 - 1

进阶:你能实现时间复杂度为 O(n) ,空间复杂度为 O(1) 的解决方案吗?

代码1:动态规划

package main

import "fmt"

func increasingTriplet(nums []int) bool {
	if len(nums) < 3 {
		return false
	}

	first := nums[0]  // 记录当前最小值
	second := 1 << 31 // 初始化为一个较大的值

	for i := 1; i < len(nums); i++ {
		if nums[i] <= first {
			first = nums[i]
		} else if nums[i] <= second {
			second = nums[i]
		} else {
			// 找到了递增的三元子序列
			return true
		}
	}

	return false
}

func main() {
	nums := []int{1, 2, 3, 4, 5}
	result := increasingTriplet(nums)
	fmt.Println(result)

	nums = []int{5, 4, 3, 2, 1}
	result = increasingTriplet(nums)
	fmt.Println(result)

	nums = []int{2, 1, 5, 0, 4, 6}
	result = increasingTriplet(nums)
	fmt.Println(result)
}

代码2:二分查找

package main

import "fmt"

func increasingTriplet(nums []int) bool {
    n := len(nums)
    if n < 3 {
        return false
    }

    subSeq := make([]int, 0, 3) // 存储递增子序列

    for _, num := range nums {
        if len(subSeq) == 0 || num > subSeq[len(subSeq)-1] {
            subSeq = append(subSeq, num)
            if len(subSeq) == 3 {
                return true
            }
        } else {
            left, right := 0, len(subSeq)-1
            for left < right {
                mid := left + (right-left)/2
                if subSeq[mid] >= num {
                    right = mid
                } else {
                    left = mid + 1
                }
            }
            subSeq[right] = num
        }
    }

    return false
}

func main() {
	nums := []int{1, 2, 3, 4, 5}
	result := increasingTriplet(nums)
	fmt.Println(result)

	nums = []int{5, 4, 3, 2, 1}
	result = increasingTriplet(nums)
	fmt.Println(result)

	nums = []int{2, 1, 5, 0, 4, 6}
	result = increasingTriplet(nums)
	fmt.Println(result)
}

输出:

true
false
true

三重循环暴力枚举:

```golang
func increasingTriplet(nums []int) bool {
    for i := 0; i < len(nums); i++ {
        for j := i+1; j < len(nums); j++ {
            if nums[j] > nums[i] {
                for k := j+1; k < len(nums); k++ {
                    if nums[k] > nums[j] {
                        return true
                    }
                }
            }
        }
    }
    return false
}
```


🌟 每日一练刷题专栏 🌟

持续,努力奋斗做强刷题搬运工!

👍 点赞,你的认可是我坚持的动力! 

🌟 收藏,你的青睐是我努力的方向! 

评论,你的意见是我进步的财富!  

 主页:https://hannyang.blog.csdn.net/ 

Rust每日一练 专栏

(2023.5.16~)更新中...

Golang每日一练 专栏

(2023.3.11~)更新中...

Python每日一练 专栏

(2023.2.18~2023.5.18)暂停更

C/C++每日一练 专栏

(2023.2.18~2023.5.18)暂停更

Java每日一练 专栏

(2023.3.11~2023.5.18)暂停更

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【数据挖掘从入门到实战】——专栏导读

目录 1、专栏大纲 &#x1f40b;基础部分 &#x1f40b;实战部分 &#x1f40b;竞赛部分 2、代码附录 数据挖掘专栏&#xff0c;包含基本的数据挖掘算法分析和实战&#xff0c;数据挖掘竞赛干货分享等。数据挖掘是从大规模数据集中发现隐藏模式、关联和知识的过程。它结合…

CE-Net

一、贡献 (1)提出DAC模块和RMP模块&#xff0c;以捕获更多高级特征并保留更多空间信息 (2)将所提出的DAC模块和RMP模块与编码器-解码器结构集成在一起&#xff0c;用于医学图像分割 二、方法 (b)部分是shortcut mechanism 空洞卷积 公式化为&#xff1a; 空洞率r对应于对输…

写一个函数求某个数对应的二进制中1的个数(牛客)

[该题的牛客链接](https://www.nowcoder.com/questionTerminal/8ee967e43c2c4ec193b040ea7fbb10b8? 一、方法一&#xff1a;%/达到二进制位右移的效果1.1用>>操作符实现1.2方法一代码的改进&#xff08;针对负数情况&#xff09; 二、方法二&#xff1a;按位与1&#x…

基于PyQt5的桌面图像调试仿真平台开发(14)色彩增强

系列文章目录 基于PyQt5的桌面图像调试仿真平台开发(1)环境搭建 基于PyQt5的桌面图像调试仿真平台开发(2)UI设计和控件绑定 基于PyQt5的桌面图像调试仿真平台开发(3)黑电平处理 基于PyQt5的桌面图像调试仿真平台开发(4)白平衡处理 基于PyQt5的桌面图像调试仿真平台开发(5)…

VSCode编译github上面的C++项目

1、下载cmake 在这里下载对应的版本 https://cmake.org/download/ 测试下载的是这个 下载完成后安装&#xff0c;安装都比较简单 2、安装CMake工具扩展 3、安装C扩展 4、下载github项目 例如&#xff1a;下载这个项目 https://gitcode.net/mirrors/zrax/pycdc?utm_source…

Axure教程—菜单滚动切换交互

本文接受的是用Axure中的动态面板和热区制作菜单滚动切换交互 效果 预览地址&#xff1a;https://u5ircj.axshare.com 功能 页面滚动到某一内容部分&#xff0c;显示其相应的菜单。 制作 一、所需元件 矩形、动态面板、热区 二、制作过程 拖入一个矩形元件&#xff0c;其大小…

CSO 们关注的软件供应链安全十个关键问题

写在前面 自从和几个小伙伴一起创办墨菲安全以来&#xff0c;有一年半多的时间了&#xff0c;创业对于我来说&#xff0c;很有意思的一个地方&#xff0c;就是有机会可以和各行各业很多非常有意思的人一起交流&#xff0c;在这个交流的过程中能够不断的提升自己的认知&#xf…

【Java基础教程】(四)程序概念篇 · 中:探索Java编程基础,解析各类运算符功能、用法及其应用场景~

Java基础教程之程序概念 中 本节学习目标1️⃣ 运算符1.1 关系运算符1.2 算术运算符1.3 三目运算符1.4 逻辑运算1.4.1 与操作1.4.2 或操作1.4.3 非操作 1.5 位运算&#x1f50d;位运算规则1.5.1 位与运算1.5.2 位或运算 &#x1f33e; 总结 本节学习目标 掌握Java中各类运算符…

MSF安装使用指导案例

零.简介 Metasploit&#xff08;MSF&#xff09;是一个免费的、可下载的框架&#xff0c;它本身附带数百个已知软件漏洞&#xff0c;是一款专业级漏洞攻击工具。当H.D. Moore在2003年发布Metasploit时&#xff0c;计算机安全状况也被永久性地改变了&#xff0c;仿佛一夜之间&a…

选择排序--简单选择排序,堆排序(大根堆,小根堆的建立,堆排序,插入删除元素)包含程序

选择排序&#xff1a;每一趟从待排序列中选择最小的元素作为有序子序列中的元素&#xff0c;待元素只剩下一个&#xff0c;就不用选了。 一&#xff0c;简单选择排序 1.过程&#xff1a;假设以A[]表示数组 1.1最开始定义一个变量用来存储数组数组第一个元素的序号 i 0; min…

赛效:怎么无损压缩Word文档

1&#xff1a;在电脑上打开PDF猫&#xff0c;在导航栏的“文件压缩”菜单里点击“Word压缩”。 2&#xff1a;点击或者拖拽Word文档上传。 3&#xff1a;文件添加成功后&#xff0c;点击右下角“开始转换”。 4&#xff1a;转换成功后&#xff0c;文件下方有下载按钮&#xff0…

快速搭建专属于自己的单商户商城系统!

<系统简介> 基于ThinkPHP6.0、Vue、uni-app、PHP8.0、MySQL5.7、element-ui等主流通用技术开发的一套likeshop单商户商城系统&#xff0c;真正做到好懂&#xff0c;易改&#xff0c;不绕弯 代码全开源 极易二开 可免费商用 系统适用于B2C、单商户、自营商城场景。完…

SOLIDWORKS电控柜设计插件

电控柜设备的种类有很多种&#xff0c;但它们大体都是箱柜式的结构。电控柜是有标准的&#xff0c;但对于公司产品而言&#xff0c;针对不同的项目&#xff0c;如果都使用同一种规格的电控柜&#xff0c;又有可能空间太大&#xff0c;造成浪费&#xff0c;因此一般来说&#xf…

Postman 连接/请求超时(远程服务/接口访问不上)

一、问题情况 二、解决思路 接口访问不了&#xff0c;先看请求方式&#xff0c;然后看IP地址&#xff0c;发现都对着&#xff0c;但请求接口对应的端口号发现连接不上&#xff0c;于是想到是不是防火墙没有关&#xff08;不过理论上严谨一点&#xff0c;是只要把这个端口给开放…

机器学习27:使用 Pandas 和 TensorFlow 进行数据建模编程实践

本文将详细介绍基于 Pandas 和 TensorFlow 探索、清理以及转换用于训练模型的数据集的方法&#xff0c;辅以代码和图片。 学习目标&#xff1a; 了解使用 Pandas 进行数据清理和处理丢失数据的基础知识。使用校准图评估模型性能。使用各种特征转换训练模型。使用可视化来了解…

前端学习——jsDay5

对象 对象使用 小练习 <!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"width…

科技力量赋予 SK5 代理 HTTP 代理 IP 网络无限可能

第一部分&#xff1a;智能网络加速技术 智能缓存&#xff1a;SK5 代理 HTTP 代理 IP 利用智能缓存技术&#xff0c;将经常访问的资源缓存在代理服务器中&#xff0c;从而实现更快速的资源加载和页面响应。这种智能化的缓存策略有效减少了对远程服务器的依赖&#xff0c;提升了用…

产品经理学习画原型-登录界面

开始画登录界面 选择一个矩形 常用修改&#xff1a; 选择文本标签&#xff1a; 设置字体、字号、颜色 添加水平线&#xff1a; 调整两个线连接&#xff0c;可以用CTRL加号、减号放大缩小画布来处理 选择一个主要按钮&#xff1a; 处理颜色、圆角 添加文本框&#xff1a; 设置高…

Android性能分析【启动优化】

作者&#xff1a;申国骏 性能分析工具 首先我们来学习一下如何使用性能分析的工具。我们从一个具体的例子出发&#xff0c;就是如何分析应用启动的性能。 Android Profiler 配置 我们来先看看Android Profiler。为了能在应用一启动就能马上捕捉到分析数据&#xff0c;我们需…

python接口自动化(十八)--重定向(Location)(详解)

简介 在实际工作中&#xff0c;有些接口请求完以后会重定向到别的url&#xff0c;而你却需要重定向前的url。URL主要是针对虚拟空间而言&#xff0c;因为不是自己独立管理的服务器&#xff0c;所以无法正常进行常规的操作。但是自己又不希望通过主域名的二级目录进行访问&#…