力扣数组类题目--41缺失的第一个正数

news2024/11/22 22:37:10

41 缺失的第一个正数
给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数。
请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案
示例 1:
输入:nums = [1,2,0]
输出:3
示例 2:
输入:nums = [3,4,-1,1]
输出:2
示例 3:
输入:nums = [7,8,9,11,12]
输出:1
方法一:暴力解题,复杂度超出范围

from typing import List
def firstMissingPositive(nums: List[int]) -> int:
    for i in nums:
        if i<0:
            nums.remove(i)
    nums.sort()
    b = []
    for i in range(0,max(nums)+2):
        if i not in nums:
            b.append(i)
    b.sort()
    if b[0]==0:
        b.remove(b[0])
    if b==[]:
        return max(nums)+1
    else:
        return min(b)

nums=[3,4,-1,1,9,-5]
a=firstMissingPositive(nums)
print(a)
#以上方法判定为超出内存限制!!!!

方法二:
没有排序或者暴力循环
总体思路:
1对于一个长度为 N 的数组,其中没有出现的最小正整数只能在 [1,N+1]中。这是因为如果 [1,N] 都出现了,那么答案是 N+1,否则答案是 [1,N] 中没有出现的最小正整数
2我们对数组进行遍历,对于遍历到的数 x,如果它在 [1,N]的范围内,那么就将数组中的第 x−1个位置(注意:数组下标从 0开始)打上「标记」。在遍历结束之后,如果所有的位置都被打上了标记,那么答案是 N+1,否则答案是最小的没有打上标记的位置加 1
3由于我们只在意 [1,N] 中的数,因此我们可以先对数组进行遍历,把不在 [1,N] 范围内的数修改成任意一个大于 N 的数(例如 N+1)。这样一来,数组中的所有数就都是正数了,因此我们就可以将「标记」表示为「负号」
在这里插入图片描述

from typing import List
def firstMissingPositive(nums: List[int]) -> int:
    n = len(nums)
    for i in range(n):
        if nums[i] <= 0:
            nums[i] = n + 1
    print(nums)
    #凡是0和负数都变为n+1#[3, 4, 7, 1, 9, 7],因为这里面7和9数字大于n=6,
    #后面都会忽略处理它们,因为缺失的第1个正整数不可能是它们.
    #除非[1,n]都出现了,那么缺失的第1个正整数会是n+1见下面的return
    for i in range(n):
        num = abs(nums[i])
        #依次处理nums中的值,注意由于下面的处理nums中的值一直在变化
        # #但是nums中各个值的绝对值是不变的
        print("num:",num)
        #核心思路:不管nums如何变化这里num依次取到的值依然是3, 4, 7, 1, 9, 7
        # num为3时把第2个位置的数字改为第2个位置中的数字的负数即把7变为-7
        #即后面处理的依然可以取到7这个数字,
        #又在[1,n]中3处在第3个位置,也就是python列表的第2个位置,这里把第2个位置7标为负数
        #意味着第2个位置标记为负数了,则第2个位置上数即2+1=3,即3不可能是缺失的第1个正整数
        if num <= n:
            nums[num - 1] = -abs(nums[num - 1])
            print("nums:",nums)#
    for i in range(n):
        if nums[i] > 0:
            return i + 1
    return n + 1

nums=[3,4,-1,1,9,-5]
a=firstMissingPositive(nums)
print(a)#a的范围肯定在[1,n+1]之间

方法三、

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

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

相关文章

词向量及文本向量

文章目录 引言1. 文本向量化2. one-hot编码3. 词向量-word2vec3.1 词向量-基于语言模型 4 词向量 - word2vec基于窗口4.1 词向量-如何训练 5. Huffman树6. 负采样-negative sampling7. Glove基于共现矩阵7.1 Glove词向量7.2 Glove对比word2vec 8. 词向量训练总结9. 词向量应用9…

Docker安装与部署java项目

文章目录 Docker安装与部署java项目 用的宝塔服务器查看容器命令部署 java 项目这是别人用的 用这个要保证 自己docker 有 jdk1.8这个是我自己的 宝塔安装的 jdk1.8 注意 需要把 jshepr 替换成自己的 jar 名字 要小写下面命令有关于 jshepr 都要改成 上面写地自己的jar3&#x…

优质内容竞争时代,爱奇艺踏进「质变」进行时

作者 | 方怡 来源 | 洞见新研社 各大企业半年报接连发布的热闹关头&#xff0c;爱奇艺给出了意料之中的喜人成绩。 财报显示&#xff0c;今年二季度&#xff0c;爱奇艺总营收为78亿元&#xff0c;同比增长17%。其中&#xff0c;包括会员服务、广告收入、内容发行和其他收入在…

Nuxt 菜鸟入门学习笔记三:视图

文章目录 入口文件组件 Components页面 Pages布局 Layouts Nuxt 官网地址&#xff1a; https://nuxt.com/ Nuxt 提供多个组件层来实现应用程序的用户界面。 入口文件 App.vue组件 Components页面 Pages布局 Layouts 下面逐一进行介绍。 入口文件 默认情况下&#xff0c;Nu…

「MySQL-00」MySQL在Linux上的安装、登录与删除

目录 一、安装MySQL 0. 安装前请先执行一遍删除操作&#xff0c;把预装或残留的MySQL删除掉 1. 安装yum源 &#xff08;解决了在哪里找MySQL的问题&#xff09; 2. 安装哪个版本的MySQL 二、启动和登录MySQL 三、删除MySQL / MariaDB 安装与卸载前&#xff0c;建议先将用户切换…

21-JQuery

JQuery 1 JQuery基础 1.1 概念 Jquery是一个第三方的JavaScript函数库,里面包含了大量写好的函数,可以让开发人员更快捷的操作dom。JQuery目前版本是4.x,国内一般用的是3.5.11.2 使用 在页面中引入jquery文件,即可使用jquery的语法 <script src="https://code.jqu…

漏洞利用和权限提升

使用Kali Linux进行漏洞利用和权限提升是渗透测试过程中的一部分&#xff0c;用于评估系统的安全性。 漏洞利用&#xff1a; 选择目标&#xff1a; 首先&#xff0c;确定 要进行漏洞利用的目标系统。这可能是一个具有已知漏洞的应用程序、服务或操作系统。 收集信息&#xff…

光伏+旅游景区

传统化石燃料可开发量逐渐减少&#xff0c;并且对环境造成的危害日益突出。全世界都把目光投向了可再生能源&#xff0c;希望可再生能源能够改变人类的能源结构。丰富的太阳能取之不尽、用之不竭&#xff0c;同时对环境没有影响&#xff0c;光伏发电是近些年来发展最快&#xf…

STL——map和set

一、set的介绍 1、set是按照一定次序存储元素的容器&#xff1b; 2、在set中&#xff0c;元素的value也标识它(value就是key&#xff0c;类型为T)&#xff0c;并且每个value必须是唯一的&#xff0c;set中的元素不能在容器中修改(元素总是const)&#xff0c;但是可以从容器中插…

改进YOLO系列:5.添加CBAM注意力机制

添加CBAM注意力机制 1. CBAM注意力机制论文2. CBAM注意力机制原理3. CBAM注意力机制的配置3.1common.py配置3.2yolo.py配置3.3yaml文件配置1. CBAM注意力机制论文 论文题目:CBAM: Convolutional Block Attention Module 论文链接:CBAM: Convolutional Block Attenti…

iOS逆向:越狱及相关概念的介绍

在上一篇内容中我们介绍了App脱壳的技术&#xff0c;今天我们来介绍一个和iOS逆向密切相关的知识&#xff1a;越狱。 iOS操作系统的封闭性一直是开发者们关注的焦点之一。为了突破Apple的限制&#xff0c;越狱技术应运而生。本文将深入探讨iOS越狱&#xff0c;包括可越狱的版本…

-bash: tree: command not found 的解决方法

在学习git操作时发现使用命令tree .git时显示错误 在网上查阅资料后&#xff0c;发现可能是没有安装生成tree的应用&#xff0c;所以我们使用命令安装应用即可 sudo yum install -y tree像这样就是安装成功了 我们再来试试 问题解决了&#xff0c;成功显示出树形结构

Qt 打开文件列表选择文件,实现拖拽方式打开文件

1. 实现打开文件列表选择文件 1.1. 创建 Qt 工程&#xff0c;并添加几个简单控件 这里笔者选用的是 QMainWindow&#xff0c;创建好工程后在 ui 界面设计中添加 QLineEdit、QPushBtton至少这两个控件&#xff0c;如下图摆放。 1.2. 头文件中添加相关操作 在 mainwindow.h 中…

研磨设计模式day12命令模式

目录 定义 几个参数 场景描述 代码示例 参数化设置 命令模式的优点 本质 何时选用 定义 几个参数 Command&#xff1a;定义命令的接口。 ConcreteCommand:命令接口的实现对象。但不是真正实现&#xff0c;是通过接收者的功能来完成命令要执行的操作 Receiver&#x…

桌面软件开发框架

一、Qt 官网&#xff1a;https://www.qt.io/ C 领域最流行的跨平台桌面端软件开发框架&#xff0c;Qt 有界面描述语言&#xff08;XML 描述界面&#xff09;&#xff0c;可以通过设计器拖拽空间设计界面&#xff0c;编译期界面描述语言被转义成 C 代码 Python 基于 PyQt 做 Q…

【android12-linux-5.1】【ST芯片】驱动与HAL移植后数据方向异常

ST的传感器驱动与HAL一直成功后&#xff0c;能拿到数据了&#xff0c;但是设备是横屏&#xff0c;系统默认是竖屏。就会出现屏幕自动转动时方向是错的的情况&#xff0c;设备横立展示的是竖屏&#xff0c;设备竖立展示的是横屏。 这个是PCB上设计的传感器贴片方向和横屏不一致…

Linux:基础指令

目录 Linux的基础指令 1.ls指令 2.pwd指令 3.cd指令 4.touch指令 5.mkdir指令 6.rmdir指令和rm指令 7.man指令&#xff08;重要&#xff09; 8.cp指令&#xff08;重要&#xff09; 9.mv指令&#xff08;重要&#xff09; 10.cat指令 11.nano指令 12.more指令 13.…

7个用于机器学习和数据科学的基本 Python 库

推荐&#xff1a;使用 NSDT场景编辑器 助你快速搭建3D应用场景 这篇文章针对的是刚开始使用Python进行AI的人&#xff0c;以及那些有经验的人&#xff0c;但对下一步要学习什么有疑问的人。我们将不时花点时间向初学者介绍基本术语和概念。如果您已经熟悉它们&#xff0c;我们鼓…

Moonbeam生态跨链互操作项目汇总

立秋已过&#xff0c;今年的夏天已经接近尾声&#xff0c;即将迎来凉爽的秋天。Moonbeam生态一同以往持续成长&#xff0c;在8月也举办了不少活动、完成集成合作以及协议更新。让我们一同快速了解Moonbeam生态项目近期发生的大小事件吧&#xff01; Moonwell Moonwell是一个建…

《Kubernetes故障篇:Container runtime network not ready》

一、环境信息 操作系统K8S版本containerd版本Centos7.6v1.24.17v1.6.12 二、背景信息 1、通过以下命令检查网络插件的状态&#xff0c;发现网络插件coredns处于pending状态 2、通过以下命令检查kubelet服务状态&#xff0c;发现Container runtime network not ready等报错 三…