Golang每日一练(leetDay0057) 缺失区间、最大间距

news2024/10/6 1:34:39

目录

163. 缺失的区间 Missing Ranges  🌟🌟

164. 最大间距 Maximum Gap  🌟🌟🌟

🌟 每日一练刷题专栏 🌟

Golang每日一练 专栏

Python每日一练 专栏

C/C++每日一练 专栏

Java每日一练 专栏


163. 缺失的区间 Missing Ranges

给定一个排序的整数数组 nums ,其中元素的范围在 闭区间 [lower, upper] 当中,返回不包含在数组中的缺失区间。

示例:

输入: nums = [0, 1, 3, 50, 75], lower = 0, upper = 99
输出: [“2”, “4->49”, “51->74”, “76->99”]

代码1:

package main

import (
	"fmt"
	"strconv"
)

func findMissingRanges(nums []int, lower int, upper int) []string {
	res := make([]string, 0)
	start := lower - 1
	for i := 0; i <= len(nums); i++ {
		end := upper + 1
		if i < len(nums) {
			end = nums[i]
		}
		if end-start == 2 {
			res = append(res, strconv.Itoa(start+1))
		} else if end-start > 2 {
			res = append(res, strconv.Itoa(start+1)+"->"+strconv.Itoa(end-1))
		}
		start = end
	}
	return res
}

func main() {
	nums := []int{0, 1, 3, 50, 75}
	lower := 0
	upper := 99
	fmt.Println(findMissingRanges(nums, lower, upper))
}

代码2: 

package main

import (
	"fmt"
	"strconv"
)

func findMissingRanges(nums []int, lower int, upper int) []string {
	res := make([]string, 0)
	start := lower
	for i := 0; i < len(nums); i++ {
		if nums[i] < start {
			continue
		}
		if nums[i] == start {
			start++
			continue
		}
		end := nums[i] - 1
		if start == end {
			res = append(res, strconv.Itoa(start))
		} else {
			res = append(res, strconv.Itoa(start)+"->"+strconv.Itoa(end))
		}
		start = nums[i] + 1
	}
	if start <= upper {
		if start == upper {
			res = append(res, strconv.Itoa(start))
		} else {
			res = append(res, strconv.Itoa(start)+"->"+strconv.Itoa(upper))
		}
	}
	return res
}

func main() {
	nums := []int{0, 1, 3, 50, 75}
	lower := 0
	upper := 99
	fmt.Println(findMissingRanges(nums, lower, upper))
}

输出:

[2 4->49 51->74 76->99]


164. 最大间距 Maximum Gap

给定一个无序的数组 nums,返回 数组在排序之后,相邻元素之间最大的差值 。如果数组元素个数小于 2,则返回 0 。

您必须编写一个在「线性时间」内运行并使用「线性额外空间」的算法。

示例 1:

输入: nums = [3,6,9,1]
输出: 3
解释: 排序后的数组是 [1,3,6,9], 其中相邻元素 (3,6) 和 (6,9) 之间都存在最大差值 3。

示例 2:

输入: nums = [10]
输出: 0
解释: 数组元素个数小于 2,因此返回 0。

提示:

  • 1 <= nums.length <= 10^5
  • 0 <= nums[i] <= 10^9

 代码1: 基数排序

package main

import "fmt"

func maximumGap(nums []int) int {
	n := len(nums)
	if n < 2 {
		return 0
	}
	maxNum := nums[0]
	for _, num := range nums {
		if num > maxNum {
			maxNum = num
		}
	}
	exp := 1
	buf := make([]int, n)
	for maxNum/exp > 0 {
		count := make([]int, 10)
		for _, num := range nums {
			digit := (num / exp) % 10
			count[digit]++
		}
		for i := 1; i < 10; i++ {
			count[i] += count[i-1]
		}
		for i := n - 1; i >= 0; i-- {
			digit := (nums[i] / exp) % 10
			count[digit]--
			buf[count[digit]] = nums[i]
		}
		copy(nums, buf)
		exp *= 10
	}
	maxGap := 0
	for i := 1; i < n; i++ {
		gap := nums[i] - nums[i-1]
		if gap > maxGap {
			maxGap = gap
		}
	}
	return maxGap
}

func main() {
	nums := []int{3, 6, 9, 1}
	fmt.Println(maximumGap(nums))
	nums = []int{10}
	fmt.Println(maximumGap(nums))
}

代码2: 桶排序

package main

import "fmt"

func maximumGap(nums []int) int {
	n := len(nums)
	if n < 2 {
		return 0
	}
	minNum, maxNum := nums[0], nums[0]
	for _, num := range nums {
		if num < minNum {
			minNum = num
		} else if num > maxNum {
			maxNum = num
		}
	}
	if minNum == maxNum {
		return 0
	}
	bucketSize := max(1, (maxNum-minNum)/(n-1))
	bucketNum := (maxNum-minNum)/bucketSize + 1
	buckets := make([][]int, bucketNum)
	for _, num := range nums {
		bucketIndex := (num - minNum) / bucketSize
		if buckets[bucketIndex] == nil {
			buckets[bucketIndex] = []int{num, num}
		} else {
			if num < buckets[bucketIndex][0] {
				buckets[bucketIndex][0] = num
			} else if num > buckets[bucketIndex][1] {
				buckets[bucketIndex][1] = num
			}
		}
	}
	maxGap := 0
	prevMax := minNum
	for _, bucket := range buckets {
		if bucket != nil {
			maxGap = max(maxGap, bucket[0]-prevMax)
			prevMax = bucket[1]
		}
	}
	return maxGap
}

func max(a, b int) int {
	if a > b {
		return a
	}
	return b
}

func main() {
	nums := []int{3, 6, 9, 1}
	fmt.Println(maximumGap(nums))
	nums = []int{10}
	fmt.Println(maximumGap(nums))
}

输出:

3
0


🌟 每日一练刷题专栏 🌟

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

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

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

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

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

Golang每日一练 专栏

Python每日一练 专栏

C/C++每日一练 专栏

Java每日一练 专栏

基数排序和桶排序都是非比较排序算法,它们的主要区别在于排序的基础方式和结果的处理方式。

基数排序

基数排序是一种按照数字的位数进行排序的算法。它将整数按照位数切割成不同的数字,然后按照每个数字的大小进行排序。基数排序的主要思想是将整数按照位数切割成不同的数字,然后按照每个数字的大小进行排序。基数排序的主要思想是将整数按照位数切割成不同的数字,然后按照每个数字的大小进行排序。

桶排序

桶排序是一种排序算法,它的基本思想是将整数按照某个固定的顺序或者范围进行分配,然后按照分配的结果进行排序。桶排序的主要思想是将整数按照某个固定的顺序或者范围进行分配,然后按照分配的结果进行排序。

基数排序和桶排序的共同点是它们都是非比较排序算法,都是将整数按照某种规则进行排序。它们的不同点在于排序的基础方式和结果的处理方式。基数排序是按照数字的位数进行排序,桶排序是按照固定的顺序或者范围进行排序。基数排序的结果是按照数字的位数进行排序,桶排序的结果是按照固定的顺序或者范围进行排序。

基数排序和桶排序的实现方式也存在差异。基数排序是通过遍历数字来寻找位置,每一次排序都需要进行一次比较。桶排序是通过将数字放入桶中来寻找位置,每一次排序都需要进行一次比较。基数排序的时间复杂度较高,通常需要O(n^2)的时间复杂度,而桶排序的时间复杂度较低,通常只需要O(n)的时间复杂度。

 

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

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

相关文章

空闲任务与阻塞延时(笔记)

目录 前言 空闲任务实现空闲任务1、定义空闲任务栈2、定义空闲任务的任务控制块4、定义空闲任务主体 实现阻塞延时vTaskDelay()函数任务与空闲任务切换的例子&#xff1a;vTaskSwitchContext()函数SysTick中断服务函数更新系统时基 SysTick初始化函数实验仿真 前言 软件延时是…

牛客网专项练习Pytnon分析库(二)

1.Z-score标准化公式&#xff0c;,中的σ表示的是什么&#xff08;C&#xff09;。 A.总体平均值 B.数据的方差 C.数据的标准差 D.数据的众数 解析&#xff1a; Z-score标准化也叫标准差标准化法&#xff0c;其中X表示数据样本值&#xff0c;μ表示数据样本的平均值&#x…

婚姻的本质,不是爱情

婚姻的本质&#xff0c;不是爱情 结婚是为了爱情么&#xff1f;普通人或许以为是&#xff0c;但实际并不是。如果你是为了爱情&#xff0c;那你不需要结婚。什么叫爱情。所谓爱情&#xff0c;就是你对她朝思暮想&#xff0c;时时刻刻都想和她在一起。而她也对你朝思暮想&#…

Vue学习笔记1 - Vue是什么?

1&#xff0c;Vue概念 官网上&#xff08;简介 | Vue.js&#xff09; 上说&#xff0c; Vue (发音为 /vjuː/&#xff0c;类似 view) 是一款用于构建用户界面的 JavaScript 框架。 这个还好理解&#xff0c;就是说它是一款前端框架&#xff0c;用于构建 前端界面的。 但是它…

NewBing 还无法访问的几个问题

大部分的AI自媒体都在说&#xff0c;Bing new已经向全世界开放了&#xff0c;我也凑一下这个热闹&#xff0c;用Edge浏览器打开&#xff0c;访问https://www.bing.com/new?ccus 想体验一下Bing new的效果&#xff0c;结果如下&#xff1a; 相信很多人都碰到了这个问题 此体验…

Windows上使用CLion配置OpenCV环境,CMake下载,OpenCV的编译,亲测可用的方法(一)

一、Windows上使用CLion配置OpenCV环境,亲测可用的方法: Windows上使用CLion配置OpenCV环境 教程里的配置: widnows 10 clion 2022.1.1 mingw 8.1.0 opencv 4.5.5 Cmake3.21.1 我自己的配置: widnows 10 clion 2022.2.5 mingw 8.1.0 https://sourceforge.net/projects/min…

二十三种设计模式第三篇--抽象工厂模式

介绍 抽象工厂模式&#xff08;Abstract Factory Pattern&#xff09;是围绕一个超级工厂创建其他工厂&#xff0c;该超级工厂又称为其他工厂的工厂。 这种类型的设计模式属于创建型模式&#xff0c;它提供了一种创建对象的最佳方式。 在抽象工厂模式中&#xff0c;接口是负责…

对标世界一流|亚马逊供应链管理经验借鉴

当前电商零售行业竞争日趋激烈&#xff0c;服务标准的提升、产品价格的竞争力等因素&#xff0c;导致企业经营成本持续上升&#xff0c;供应链的管理水平已经成为零售行业成败的关键。然而在电商零售行业的红海竞争中&#xff0c;亚马逊却始终保持着高速增长的态势&#xff0c;…

港联证券|4连板的AI+传媒概念股火了,近5亿资金抢筹

今天&#xff0c;沪深两市共51股涨停&#xff0c;除掉10只ST股&#xff0c;合计41股涨停。别的&#xff0c;11股封板未遂&#xff0c;全体封板率为81%。 涨停战场&#xff1a;长江传媒封单量最高 从收盘涨停板封单量来看&#xff0c;长江传媒封单量最高&#xff0c;有39.96万手…

STL初识

什么是STL? 菜鸟教程的解释是&#xff1a;C STL&#xff08;标准模板库&#xff09;是一套功能强大的 C 模板类&#xff0c;提供了通用的模板类和函数&#xff0c;这些模板类和函数可以实现多种流行和常用的算法和数据结构&#xff0c;如向量、链表、队列、栈。 也就是说&am…

4.1 数据结构引入

目录 什么是数据结构 语言出生顺序 基本概念 数据的逻辑结构 数据的存储结构 顺序储存 链式存储 索引存储 散列存储 基本概念 第一卷《基本算法》 第二卷《半数字化算法》 第三卷《排序与搜索》 第四卷《组合算法》 什么是数据结构 数据结构研究计算机数据间关系…

每日学术速递5.5

CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 | NLP 自然语言处理 Subjects: cs.CL 1.ResiDual: Transformer with Dual Residual Connections 标题&#xff1a;ResiDual&#xff1a;具有双剩余连接的Transformer 作者&#xff1a;Shufang Xie, Huishuai Zhang, Jun…

制造企业选择库存管理条码工具需要关注哪些点?

Dynamsoft Barcode Reader SDK 一款多功能的条码读取控件&#xff0c;只需要几行代码就可以将条码读取功能嵌入到Web或桌面应用程序。这可以节省数月的开发时间和成本。能支持多种图像文件格式以及从摄像机或扫描仪获取的DIB格式。使用Dynamsoft Barcode Reader SDK&#xff0c…

OpenCV实战(22)——单应性及其应用

OpenCV实战&#xff08;22&#xff09;——单应性及其应用 0. 前言1. 单应性1.1 单应性基础1.2 计算两个图像之间的单应性1.3 完整代码 2. 检测图像中的平面目标2.1 特征匹配2.2 完整代码 小结系列链接 0. 前言 我们已经学习了如何从一组匹配项中计算图像对的基本矩阵。在射影…

读论文《大气压等离子体电离波沿介质管传输特性研究》

文章目录 一、研究背景和意义二、研究目的与内容三、电离波概述3.1 电离波与传统的流注放电3.2 电离波传输速度的计算方法 四、放电参数对电离波传输特性的影响4.1 施加电压与电压波形对电离波传输的影响4.1.1 交流高压对电离波的影响4.1.2 脉冲高压对电离波的影响![在这里插入…

《编程思维与实践》1047.Base64编码

《编程思维与实践》1047.Base64编码 题目 思路 直接模拟:将每个Base64编码值都分为两部分:前半部分由上一个字符求得,后半部分由下一个字符求得. 特别地,如果字符为第一个或最后一个,则直接可以求得Base64编码. 如下图: 其中,% 2 n 2^n 2n表示取出后n位的二进制位, 这是因…

专业游戏录屏软件Camtasia 2023强悍来袭,Camtasia Studio 2023的新增功能!

Camtasia Studio 2023是一款专门录制屏幕动作的工具&#xff0c;它能在任何颜色模式下轻松地记录 屏幕动作&#xff0c;包括影像、音效、鼠标移动轨迹、解说声音等等&#xff0c;另外&#xff0c;它还具有即时播放和编 辑压缩的功能&#xff0c;可对视频片段进行剪接、添加转场…

又一起数据泄露事件五个月内的第二次

据报道&#xff0c;T-Mobile 在发现攻击者从 2023 年 2 月下旬开始的一个多月内访问了数百名客户的个人信息后&#xff0c;披露了 2023 年的第二次数据泄露事件。 与之前报告的数据泄露事件&#xff08;最近一次影响了 3700 万人&#xff09;相比&#xff0c;此次事件仅影响了…

Linux一学就会——编写自己的shell

编写自己的shell 进程程序替换 替换原理 用fork创建子进程后执行的是和父进程相同的程序(但有可能执行不同的代码分支),子进程往往要调用一种exec函数 以执行另一个程序。当进程调用一种exec函数时,该进程的用户空间代码和数据完全被新程序替换,从新程序的启动 例程开始执行…

Node.js 是什么?

简介 Node.js入门指南&#xff0c;服务器端JavaScript运行时环境。Node.js是在Google Chrome V8 JavaScript引擎的基础上构建的&#xff0c;它主要用于创建web服务器&#xff0c;但并不局限于此。 实际上Node.js 是把运行在浏览器中的js引擎抽离处理&#xff0c;进行再次封装…