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

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]表示当前区间的strat
            if 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] = t
            start += 1
            end -= 1
    def 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] = 1
        L[0] = 1
        for i in range(1, n):
            L[i] = nums[i - 1] * L[i - 1]

        # R[i] 为索引 i 右侧所有元素的乘积
        # 对于索引为 'length-1' 的元素,因为右侧没有元素,所以 R[length-1] = 1
        R[n - 1] = 1
        for 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+1
        idx=0
        while idx<n:
            if nums[idx]<=0 or nums[idx]>n:
                nums[idx]=-1
                idx+=1
            # 否则将其交换到该数字nums[idx]对应的位置上nums[nums[idx]-1]
            # 如果不需要交换则往前走
            else:
                if nums[idx]==idx+1: #如果对应的位置已经有了,直接下一位
                    idx+=1
                else:
                    t=nums[nums[idx]-1]
                    nums[nums[idx]-1]=nums[idx] #把当前位置的数据放在value-1的位置上去
                    nums[idx]=t
        for i in range(n):
            if nums[i]!=i+1: #结果就是遇见的第一个不等于该位置上的数
                return i+1
        return n+1  #否则就是N+1

参考知乎
参考代码

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

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

相关文章

Visual Studio Code 连接远程服务器方法

1、输入用户名和服务器ip连接远程服务器 2、选择配置文件 配置文件路径&#xff1a;C:\Users\Administrator\.ssh\config config的内容大致如下&#xff1a; Host 192.168.134.3HostName 192.168.134.3User zhangshanHost 192.168.134.3HostName 192.168.134.3User lisiHost…

基础篇_快速入门(Java简介,安装JDK,cmd命令行运行Java文件产生乱码问题的解决方式,IDE工具,实用工具)

文章目录 一. Java 简介1. JVM2. JRE3. JDK 二. 安装 JDK1. 下载和安装2. 配置 Path3. 配置 JAVA_HOME&#xff08;选讲&#xff09;优化 三. 入门案例1. 第一行代码1) jshell2) 代码解读总结 3) 为何要分成对象与方法 2. 第一份源码1) 源码结构2) 编写 java 源代码3) 编译 jav…

聊一聊 C# 线程切换后上下文都去了哪里

一&#xff1a;背景 1. 讲故事 总会有一些朋友问一个问题&#xff0c;在 Windows 中线程做了上下文切换&#xff0c;请问被切的线程他的寄存器上下文都去了哪里&#xff1f;能不能给我挖出来&#xff1f;这个问题其实比较底层&#xff0c;如果对操作系统没有个体系层面的理解…

groovy XmlParser 递归遍历 xml 文件,修改并保存

使用 groovy.util.XmlParser 解析 xml 文件&#xff0c;对文件进行修改&#xff08;新增标签&#xff09;&#xff0c;然后保存。 是不是 XmlParser 没有提供方法遍历每个节点&#xff0c;难道要自己写&#xff1f; 什么是递归&#xff1f; 不用说&#xff0c;想必都懂得~ …

基于Pixhawk和ROS搭建自主无人车(一):底盘控制篇

参考 ArduPilot Development超维空间科技乐迪MiniPix车船使用说明书 1. 硬件篇 1.1 底盘构成一览 1.2 底盘接线示意 2. 软件篇 2.1 APM 固件下载 pixhawk 是硬件平台&#xff0c;PX4 是 pixhawk 的原生固件&#xff0c;APM&#xff08;Ardupilot Mega&#xff09;是硬件平台…

C++里main函数int main(int argc, char **argv)

C里main函数int main(int argc, char **argv), 这两个参数argc和argv分别是什么

安全帽/反光衣检测AI智能分析网关V4如何查看告警信息并进行处理?

智能分析网关V4属于高性能、低功耗的软硬一体AI边缘计算硬件设备&#xff0c;目前拥有3种型号&#xff08;8路/16路/32路&#xff09;&#xff0c;支持Caffe / DarkNet / TensorFlow / PyTorch / MXNet / ONNX / PaddlePaddle等主流深度学习框架。硬件内部署了近40种AI算法模型…

9个icon图标网站,海量免费矢量图标库!

​划到最后“阅读原文”——领取工具包&#xff08;超过1000工具&#xff0c;免费素材网站分享和行业报告&#xff09; Hi&#xff0c;我是胡猛夫~&#xff0c;专注于分享各类价值网站、高效工具&#xff01; 更多内容&#xff0c;更多资源&#xff0c;欢迎交流&#xff01;公…

MacOS安装Miniforge、Tensorflow、Jupyter Lab等(2024年最新)

大家好&#xff0c;我是邵奈一&#xff0c;一个不务正业的程序猿、正儿八经的斜杠青年。 1、世人称我为&#xff1a;被代码耽误的诗人、没天赋的书法家、五音不全的歌手、专业跑龙套演员、不合格的运动员… 2、这几年&#xff0c;我整理了很多IT技术相关的教程给大家&#xff0…

应用案例 | 基于三维机器视觉的自动化无序分拣解决方案

​ 近年来&#xff0c;电商行业蓬勃发展&#xff0c;订单的海量化、订单类型的碎片化&#xff0c;使物流行业朝着“多品种、无边界、分类广”的方向迅速发展。根据许多研究机构的预测&#xff0c;电子商务销售额预计将以每年两位数的速度增长&#xff0c;推动整个行业的规模不…

【排序】快速排序(C语言实现)

文章目录 前言1. Hoare思想2. 挖坑法3. 前后指针法4. 三路划分5. 快速排序的一些小优化5.1 三数取中常规的三数取中伪随机的三数取中 5.2 小区间优化 6. 非递归版本的快排7. 快速排序的特性总结 前言 快速排序是Hoare于1962年提出的一种二叉树结构的交换排序方法&#xff0c;其…

Leetcode 416 分割等和子集

题意理解&#xff1a; 给你一个 只包含正整数 的 非空 数组 nums 。请你判断是否可以将这个数组分割成两个子集&#xff0c;使得两个子集的元素和相等。 即将数组的元素分成两组&#xff0c;每组数值sum(nums)/2 若能分成这样的两组&#xff0c;则返回true,否则返回false 本质上…

国标28181平台的手机视频监控客户端的电子地图功能对比

目 录 一、手机客户端 1、概述 2、具体功能简述 二、电子地图功能 1、经纬度定位 2、附近设备 3、实时浏览功能 4、录像回放 5、缩放功能 三、手机web客户端和CS客户端上的电子地图功能对比 1、对比表 2、测距&#xff08;PC客户端功能&#xff09; 3…

【分布式技术】rsync远程同步服务

目录 一、rsync&#xff08;远程同步&#xff09; 二、实操rsync远程文件同步 准备一个服务端192.168.20.18以及一个客户端192.168.20.30 1、服务端搭建&#xff1a;先完成服务端配置&#xff0c;启动服务 rsync拓展 1、关于rsyncd服务的端口号 2、rsync和scp的区别 2、测…

在qemu虚拟机环境下,使用kgdb调试kernel

enable kgdb的情况下&#xff0c;使用qemu启动kernel 1&#xff0c;需要先在内核配置中增加kgdb的支持 2&#xff0c;启动qemu虚拟机时&#xff0c;增加参数-s -S&#xff0c;这两个参数会使得kernel在启动之后遇到的第一个指令等待gdb连接 例子&#xff1a; /qemu-project…

爬虫之牛刀小试(三):爬取中国天气网全国天气

天气网&#xff1a; import requests from bs4 import BeautifulSoup import time from pyecharts.charts import Bar from pyecharts import options as optsurl_hb http://www.weather.com.cn/textFC/hb.shtml url_db http://www.weather.com.cn/textFC/db.shtml url_hd …

RocketMQ Dashboard可视化工具

RocketMQ Dashboard 将 RocketMQ的相关指标展示在web页面 &#xff0c;支持以可视化工具代替 Topic 配置、Broker 管理等命令行操作。 官方文档地址&#xff1a;RocketMQ Dashboard | RocketMQ 目录 1.下载安装 1.1 系统要求&#xff1a; 1.2 源码安装 1.3 访问页面 2.功…

微信小程序地图展示区轮廓+展示指定地区标点气泡

需求&#xff1a;显示当前地区所有的学校列表&#xff1a;名称。区域显示区域名称下面所属学校数量 根据用户缩小放大当前区域&#xff08;大于12显示区&#xff0c;小于12显示当前区学校列表&#xff09;&#xff0c;获取&#xff1a;regionchange的type&#xff1a;end数据&…

中央处理器CPU(1)----指令周期和微程序

前言&#xff1a;由于期末复习计算机组成效率太慢所以抽时间写一下文章总结一下思路&#xff0c;理解不是很深&#xff0c;欢迎各位不吝赐教。 由于时间不是很充分&#xff0c;所以有些考点由于我们不考试&#xff0c;一笔带过了。 我这是期末复习总结&#xff0c;不是考研知识…

【BIAI】Lecture 7 - EEG data analysis

EEG data analysis 专业术语 EEG 脑电图 excitatory postsynaptic potential(EPSP)兴奋性突触后电位 inhibitory postsynaptic potential(IPSP) 抑制性突触后电位 action potential 动作电位 dipoles 偶极子 Pyramidal neurons 椎体细胞 Axon 轴突 Dendrite 树突 Synapse 突触…