每天刷两道题——第十二天+第十三天

1.1合并区间

以数组 i n t e r v a l s intervals intervals 表示若干个区间的集合,其中单个区间为 i n t e r v a l s [ i ] = [ s t a r t i , e n d i ] intervals[i] = [starti, endi] intervals[i]=[starti,endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。

输入:intervals = [[1,3],[2,6],[8,10],[15,18]]
输出:[[1,6],[8,10],[15,18]]
解释:区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].

先对输入列表进行排序,然后判断结果区间的end在不在当前区间之间,在就合并,不在就添加进入结果区间。
在这里插入图片描述

代码

 def merge(self, intervals):intervals.sort(key=lambda x: x[0])  #按照第一个元素排序merged = []for interval in intervals:# 如果列表为空,或者当前区间与上一区间不重合,直接添加#merged[-1][1]表示返回列表最后一个区间的end #interval[0]表示当前区间的stratif not merged or merged[-1][1] < interval[0]:merged.append(interval)else:# 否则的话,我们就可以与上一区间进行合并merged[-1][1] = max(merged[-1][1], interval[1])return merged

1.2轮转数组

给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。

输入: nums = [1,2,3,4,5,6,7], k = 3
输出: [5,6,7,1,2,3,4]
解释:
向右轮转 1 步: [7,1,2,3,4,5,6]
向右轮转 2 步: [6,7,1,2,3,4,5]
向右轮转 3 步: [5,6,7,1,2,3,4]

数组翻转
代码

    def reverse(self,nums, start, end):while (start < end):t = nums[start]nums[start] = nums[end]nums[end] = tstart += 1end -= 1def rotate(self,nums,k):k%=len(nums) #求余n=len(nums)self.reverse(nums,0,n-1)  #将整个数组翻转self.reverse(nums,0,k-1)  #将要移动的数据翻转self.reverse(nums,k,n-1)  #将剩下的数据翻转return nums

1.3除自身以外数组的乘积

给你一个整数数组 n u m s nums nums,返回数组 a n s w e r answer answer ,其中 a n s w e r [ i ] answer[i] answer[i] 等于 n u m s nums nums 中除 n u m s [ i ] nums[i] nums[i] 之外其余各元素的乘积 。题目数据保证数组 n u m s nums nums之中任意元素的全部前缀元素和后缀的乘积都在 32位整数范围内。不要使用除法,且在 O ( n ) O(n) O(n) 时间复杂度内完成此题。

输入: nums = [1,2,3,4]
输出: [24,12,8,6]

利用索引左侧所有数字的乘积和索引右侧所有数字的乘积(即前缀与后缀)相乘得到答案

代码

    def productExceptSelf(self,nums):n=len(nums)# L 和 R 分别表示左右两侧的乘积列表L, R, answer = [0] * n, [0] * n, [0] * n# L[i] 为索引 i 左侧所有元素的乘积# 对于索引为 '0' 的元素,因为左侧没有元素,所以 L[0] = 1L[0] = 1for i in range(1, n):L[i] = nums[i - 1] * L[i - 1]# R[i] 为索引 i 右侧所有元素的乘积# 对于索引为 'length-1' 的元素,因为右侧没有元素,所以 R[length-1] = 1R[n - 1] = 1for i in reversed(range(n - 1)):R[i] = nums[i + 1] * R[i + 1]# 对于索引 i,除 nums[i] 之外其余各元素的乘积就是左侧所有元素的乘积乘以右侧所有元素的乘积for i in range(n):answer[i] = L[i] * R[i]return answer

1.4缺失的一个正数

给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数。请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。(最小正整数为1,0既不是正数也不是负数)

输入:nums = [1,2,0]
输出:3

输入1:nums = [7,8,9,11,12]
输出1:1

假设数组的长度为 N,那我们容易发现,我们能找到的缺失的第一个正数一定在1 ~ (N+1) 中。如果数组中的数字就是1 ~ N,则 (N+1) 就是第一个缺失的正数,否则 1 ~ N 中一定缺失了某个正数,因此可以发现此处需要进行排序和查找的数字只有数组中处于1 ~ N 中的数字,其他数字可以无视

我们知道数组除了储存功能外还有 0 ~ (N-1) 共计 N 个下标,且可以和数字 1 ~ N 形成一一对应,因此我们可以利用下标来进行排序。

我们只需要遍历一次数组,将每个位于1 ~ N 的数字放到其在数组对应下标(数字减一)的位置中,其他数字直接标记为 N+1,这样当我们再次从头到尾遍历数组时,遇到第一个和下标不对应的数字,该下标对应的数字就是缺失的第一个正数

代码

    def firstMissingPositive(self, nums):n = len(nums) #将不需要考虑的数字赋值为N+1idx=0while idx<n:if nums[idx]<=0 or nums[idx]>n:nums[idx]=-1idx+=1# 否则将其交换到该数字nums[idx]对应的位置上nums[nums[idx]-1]# 如果不需要交换则往前走else:if nums[idx]==idx+1: #如果对应的位置已经有了,直接下一位idx+=1else:t=nums[nums[idx]-1]nums[nums[idx]-1]=nums[idx] #把当前位置的数据放在value-1的位置上去nums[idx]=tfor i in range(n):if nums[i]!=i+1: #结果就是遇见的第一个不等于该位置上的数return i+1return n+1  #否则就是N+1

参考知乎
参考代码

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于ssm智慧社区停车管理系统设计与实现【附源码】

基于ssm智慧社区停车管理系统设计与实现 &#x1f345; 作者主页 央顺技术团队 &#x1f345; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; &#x1f345; 文末获取源码联系方式 &#x1f4dd; 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&am…

计算机速成课Crash Course - 18. 操作系统

今天继续计算机速成课Crash Course的系列讲解。 更多技术文章&#xff0c;全网首发公众号 “摸鱼IT” 锁定 -上午11点 - &#xff0c;感谢大家关注、转发、点赞&#xff01; 计算机速成课Crash Course - 17. 集成电路&摩尔定律 18. 操作系统 1940,1950 年代的电脑&#…

SpringBoot外部配置文件

✅作者简介&#xff1a;大家好&#xff0c;我是Leo&#xff0c;热爱Java后端开发者&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;Leo的博客 &#x1f49e;当前专栏&#xff1a; 循序渐进学SpringBoot ✨特色专栏&…

NumPy 数据操作实用指南:从基础到高效(下)

文章接上篇&#xff1a; In [53]: from PIL import Image In [60]: dog Image.open(./dog.jpg) dog . . . In [61]: dog_datanp.array(dog) # 图片数据是ndarray # 彩色照片三维&#xff1a;高度&#xff0c;宽度&#xff0c;像素&#xff08;表示不同颜色&#xff09;&…

并发前置知识一:线程基础

一、通用的线程生命周期&#xff1a;“五态模型” 二、java线程有哪几种状态&#xff1f; New&#xff1a;创建完线程Runable&#xff1a;start(),这里的Runnable包含操作的系统的Running&#xff08;运行状态&#xff09;和Ready&#xff08;上面的可运行状态&#xff09;Blo…

快速打通 Vue 3(四):标签的 ref 属性与 Vue3 生命周期

很激动进入了 Vue 3 的学习&#xff0c;作为一个已经上线了三年多的框架&#xff0c;很多项目都开始使用 Vue 3 来编写了 这一组文章主要聚焦于 Vue 3 的新技术和新特性 如果想要学习基础的 Vue 语法可以看我专栏中的其他博客 Vue&#xff08;一&#xff09;&#xff1a;Vue 入…

小程序基础学习(组件化)

&#xff08;一&#xff09;创建 找到components文件夹下面创建新的文件夹 然后再文件夹内创建component格式的文件 创建后这样 我创建的是my-info的文件夹以及my-info的components文件&#xff0c;跟着普通的页面一样 &#xff08;二&#xff09; 注册组件 找到你需要使用组…

openGauss学习笔记-194 openGauss 数据库运维-常见故障定位案例-分析查询语句长时间运行的问题

文章目录 openGauss学习笔记-194 openGauss 数据库运维-常见故障定位案例-分析查询语句长时间运行的问题194.1 分析查询语句长时间运行的问题194.1.1 问题现象194.1.2 原因分析194.1.3 处理办法 openGauss学习笔记-194 openGauss 数据库运维-常见故障定位案例-分析查询语句长时…

如何在Docker本地搭建流程图绘制神器draw.io并实现公网远程访问

推荐 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站 前言 提到流程图&#xff0c;大家第一时间可能会想到Visio&#xff0c;不可否认&#xff0c;VIsio确实是功能强大&#xff0c;但是软…

你了解计算机网络的发展历史吗?

1.什么是计算机网络 计算机网络是指将一群具有独立功能的计算机通过通信设备以及传输媒体被互联起来的&#xff0c;在通信软件的支持下&#xff0c;实现计算机间资源共享、信息交换或协同工作的系统。计算机网络是计算机技术与通信技术紧密结合的产物&#xff0c;两者的迅速发展…

linux手动安装 vscode-server

适用场景 很多时候&#xff0c;我们需要在本机&#xff08;比如windows&#xff09;通过remote ssh访问远程服务器&#xff08;一般是ubuntu&#xff09;&#xff0c;但经常出现 vscode 一直连不上远程服务器的情况&#xff0c;看一下 log&#xff1a; 这个log表示远程服务器…

2023年低代码无代码产业大会:核心内容与学习收获(附大会核心PPT下载)

2023年低代码无代码产业大会聚焦了行业最前沿的趋势与技术&#xff0c;为企业数字化转型提供新的思路和方法。在这次大会上&#xff0c;我们可以深入了解到低代码/无代码技术的最新发展&#xff0c;以及如何利用这些技术来提高业务效率和创新能力。 一、大会的核心内容 1、低代…