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

2024-01-12 04:28

本文主要是介绍每天刷两道题——第十二天+第十三天,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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.chinasem.cn/article/596791

相关文章

每天认识几个maven依赖(ActiveMQ+activemq-jaxb+activesoap+activespace+adarwin)

八、ActiveMQ 1、是什么? ActiveMQ 是一个开源的消息中间件(Message Broker),由 Apache 软件基金会开发和维护。它实现了 Java 消息服务(Java Message Service, JMS)规范,并支持多种消息传递协议,包括 AMQP、MQTT 和 OpenWire 等。 2、有什么用? 可靠性:ActiveMQ 提供了消息持久性和事务支持,确保消

两道笔试题

“char a='\72'”是什么意思? 这么理解:\为转义字符,\072转义为一个八进制数072,也就是十进制数的58买一送一,将转义字符对照表也一并贴给你吧:转义字符 意义 ASCII码值(十进制) \a 响铃(BEL) 007 \b 退格(BS) 008 \f 换页(FF) 012 \n 换行(LF) 010 \r 回车(CR) 013 \t 水平制表(HT) 009 \v 垂直制表(VT

每天一道面试题(2):fail-safe 机制与 fail-fast 机制分别有什么作用?

当谈论Java集合的 fail-fast 和 fail-safe 机制时,涉及的是在集合被并发修改时的行为和处理方式。这些机制对保证程序的正确性和稳定性非常重要,尤其是在多线程环境中。 1. Fail-Fast 机制 定义: Fail-fast 机制的核心是在检测到集合在遍历过程中被修改时,立即抛出 ConcurrentModificationException 异常,从而中断迭代操作。这种

【销售预测 ARIMA模型】ARIMA模型预测每天的销售额

输入数据txt格式: 2017-05-01 100 2017-05-02 200 ……. python 实现arima: # encoding: utf-8"""function:时间序列预测ARIMA模型预测每天的销售额author:donglidate:2018-05-25"""# 导入库import numpy as np # numpy库from statsmode

每天一个数据分析题(五百二十七)- word2vec模型

Word2vec,是一群用来产生词向量的相关模型。这些模型为浅而双层的神经网络,用来训练以重新建构语言学之词文本。关于word2vec模型,下面说法不正确的是: A. 得到的词向量维度小,可以节省存储和计算资源 B. 考虑了全局语料库的信息 C. 无法解决多义词的问题 D. 可以表示词和词之间的关系 数据分析认证考试介绍:点击进入 数据分析考试大纲下载 题目来源于CDA模拟题库 点

今日早报 每日精选15条新闻简报 每天一分钟 知晓天下事 9月6日,星期五

每天一分钟,知晓天下事! 2024年9月6日 星期五 农历八月初四 1、 “摩羯”加强为17级超强台风,6日广东深圳、珠海、湛江等多地全市停课。 2、 两部门:事业单位不得自行制定面向特定人员的专项招聘、加分等倾斜政策。 3、 央行:降准还有一定空间;存贷款利率进一步下行面临一定约束。 4、 我国天问三号任务计划2028年前后实施两次发射任务,实现火星样品返回地球。 5、 山东、四川、吉

每天掌握一个软测高级技巧:接口自动化神器apin进阶操作

之前写了一篇关于接口自动化框架 apin 入门使用是文章,主要介绍了 apin 的安装以及用例编写的方法。 今天这篇文章来给大家聊聊,apin 中的一些高级使用技巧。比如依赖接口的变量提取和引用,用例断言,以及函数工具的使用。 变量提取和引用 变量提取和引用主要是为了解决接口之间的参数依赖问题。 使用场景:接口 A 的参数中需要使用接口 B 返回的某个数据,那么就要在请求 B 接口之后,提

今日早报 每日精选15条新闻简报 每天一分钟 知晓天下事 9月5日,星期四

每天一分钟,知晓天下事! 2024年9月5日 星期四 农历八月初三 1、 气象台发布台风红色预警:“摩羯”或为近十年影响海南最强台风,海口5日12时起在全市范围内分批启动“六停”措施。 2、 国家医保局:将人工耳蜗等高值医用耗材纳入采购范围。 3、 食用油散装运输强制性国标启动制订:要求专用容器+核查运输记录。 4、 包装不得超三层、不得使用红木等,中秋节前多地启动

10天计划:每天5小时睡眠

Day 1 - Day 2: 适应期 目标:适应减少睡眠时间的变化。 睡眠:00:00 - 05:00(5小时)早晨(5:00 - 7:00):轻度运动(瑜伽、拉伸、散步)、20分钟冥想。上午(7:00 - 12:00):专注高强度任务(需要逻辑思考或创作)。中午(12:00 - 13:00):午餐,午间20分钟小睡。下午(13:00 - 17:00):处理日常任务和会议,做较轻松的工作。晚上

每天分享一个FPGA开源代码(3)- I2C

​ I2C(Inter-Integrated Circuit)是一种两线式串行总线。   ​   一、主要特点 1. 简单性:只使用两根线,即串行数据线(SDA)和串行时钟线(SCL),减少了硬件连接的复杂性。 2. 多设备连接:可以连接多个具有 I2C 接口的设备到同一总线,每个设备都有唯一的地址,通过地址来区分和通信。 3. 双向通信:SDA 线允许数据在主设备和从设备之间双