41. First Missing Positive

输入:一个没有排序的正数数组nums
输出:在 nums数组中未出现的最小的正整数
规则:数组中的元素可能是负数,也可能重复。要求时间复杂度O(n),空间复杂度O(1)。
分析:题目其实很简单,遍历一次放入map中。然后从1到n遍历,是否在map中存在。但是这样不符合空间复杂度。
分析2:力扣官方解答。首先我们不需要考虑负数、0,以及大于n+1的值。因为答案一定在[1,n+1]之间。因为空间限制条件,我们可以使用原数组实现一个map,类似布隆过滤器。我们假设修改之后nums[i]<0,表示i+1存在;否则i+1不存在。
具体实现算法是:
1 检查数组中1是否存在。不存在则返回1,否则进入2.
2 将数组中不在[1,n]之间的值都设置为1。
3 遍历数组,设置nums[nums[i] -1] = 负数,这里需要注意,元素值可能重复。
4 遍历数组,找到第一个nums[i]<0的元素返回。

说明:代码实现一些细节和算法过程略有不同。

public int firstMissingPositive(int[] nums) {int n  = nums.length;//检查1是否缺失int oneCount = 0;for(int num : nums){if(num==1){oneCount =1 ;break;}}if(oneCount == 0) return 1;if(n == 1) return 2;//替换无效数字为1for(int i=0; i < n; i++){if(nums[i] <=0  || nums[i]>n){nums[i] = 1;}}//一个布隆过滤器 nums[i] >0表示 i不存在;nums[i]<0,表示i存在。nums[0]代表n是否存在。 for(int i=0;i <n; i++){int a = Math.abs(nums[i]);if(a == n){nums[0] = - Math.abs(nums[0]);}else{nums[a] = -Math.abs(nums[a]);}}for(int i=1;i <n; i++){if(nums[i] > 0){return i;}}return nums[0] >0? n: n+1;}

分析3:其实也是用nums[i]的值表示i+1是不是存在。这里的判断依据是如果nums[i]=i+1,则说明i+1存在,否则不存在。这个方法实现的技巧是交换。上一个方法实现的技巧是替换。原链接。

	public int firstMissingPositive(int[] nums) {int n = nums.length;for(int i=0;i <n; i++){while(nums[i] >0 && nums[i]<=n && nums[nums[i] -1 ]!=nums[i]){swap(nums,i,nums[i]-1);}}for(int i=0;i <n; i++){if(nums[i] !=  i+1){return i+1;}}return n+1;}private void swap(int[] nums, int i, int j) {int  tmp = nums[i] ;nums[i] = nums[j];nums[j] = tmp;}

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

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

相关文章

spring学习(37):注入list类型

目录结构 pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/P…

【小技巧】【牛客网】【JAVA】在线输入输出练习

【总结】 1. 一直输入模板 import java.util.*; public class Main{public static void main(String[] args) {Scanner sc new Scanner(System.in);while (sc.hasNext()) {//操作}} }2. 有组数或者输入个数 import java.util.Scanner; public class Main{public static voi…

你是一直认为count(1)比count(*)效率高么?

MySQL count(1) 真的比 count(*) 快么? 反正同事们都是这么说的&#xff0c;我也姑且觉得对吧&#xff0c;那么没有自己研究一下究竟&#xff1f;如果我告诉你他们一样&#xff0c;你信么&#xff1f; 有 Where 条件的 count&#xff0c;会根据扫码结果count 一下所有的行数&a…

169. Majority Element

输入&#xff1a;一个数组 输出&#xff1a;数组中的众数 规则&#xff1a;众数就是出现次数大于数组长度一半的元素。 分析&#xff1a;暴力&#xff0c;计算每个元素出现次数。 public int majorityElement(int[] nums) {for(int num : nums){int count 0;for(int num2 : nu…

spring学习(38):注入set类型

目录结构 pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/P…

spring学习(39):注入map类型

目录结构 pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/P…

NanUI文档 - 如何实现C#与Javascript的相互通信

NanUI文档目录 NanUI简介开始使用NanUI打包并使用内嵌式的HTML/CSS/JS资源使用网页来设计整个窗口如何实现C#与Javascript的相互通信如何处理NanUI中的下载过程 - DonwloadHandler的使用(待更新。。。)如何处理NanUI中的弹窗过程 - LifeSpanHandler的使用(待更新。。。)如何控制…

23. Merge k Sorted Lists

输入&#xff1a;k个有序链表lists 输出&#xff1a;一个有序链表 规则&#xff1a;将这个k个有序链表合并成一个有序链表 分析&#xff1a;在链表中合并两个有序链表为一个有序链表是基本功。最开始的直觉是我们可以将lists[0]和lists[1]合并得到 result&#xff0c;result再和…

spring学习(40):注入数组类型

目录结构 pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/P…

PS教程:如何拼图调色出高大上的作品

Hello&#xff0c;小伙伴们&#xff0c;是不是每每看到一些创意海报&#xff0c;就苦于自己不会做&#xff0c;其实合成并不难&#xff0c;掌握原理与技法&#xff0c;接下来就是拼图调色啦&#xff01;首先我们先来看下最终的效果图&#xff0c;铛铛铛&#xff01; 下面我们就…

32. Longest Valid Parentheses

输入&#xff1a;一个字符串s&#xff0c;只包含字符(和) 输出&#xff1a;一个整数&#xff0c;表示最长括号匹配子串的长度。 规则&#xff1a;括号匹配的字符是指每有一个‘(’字符就有对应的‘)’。 其他 情况都是无效的。 暴力算法分析&#xff1a;取字符串s的每一个子串&…

spring学习(41):属性注入

目录结构 pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/P…

【JS】实时监控页面,input框数值自动求和

需求&#xff1a; 有一个页面需要将input框填入的各个费用自动相加&#xff0c;添加到“合计费用”里。 解决方案&#xff1a; 使用jquery的blur实践&#xff0c;每个费用的Input框检测到失去焦点时&#xff0c;将所有的input框数值相加求和&#xff0c;然后写入到“合计费用”…

spring学习(30):定义第一个bean

目录结构 pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/P…

通过字符串引入模块下的属性

flask中可以配置一个字符串导入settings下的配置文件 app.config.from_object("settings.ProductionConfig")这里就是来讲解一下这个到底是怎么实现的。 例&#xff1a; 这是just_xxx.py里面的内容 # -*- coding: utf-8 -*- # Time : 2019/6/17 上午 11:50 # Auth…

392. Is Subsequence

写得好的解题思路链接&#xff1a;url1 url2(动态规划写的比较好) 输入&#xff1a;两个字符串s和t&#xff0c;t可能会很长 输出&#xff1a;s是否是t的子序列。 规则&#xff1a;字符串子序列的定义是&#xff1a;通过删除字符串t的部分字符但是不能改变字符相对位置&#x…

spring学习(42):属性注入注入数组和列表的说明

目录结构 pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/P…

spring学习(43):属性注入中注入引用对象

目录结构 pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/P…

Dijkstrala算法

文章出处&#xff1a;极客时间《数据结构和算法之美》-作者&#xff1a;王争。该系列文章是本人的学习笔记。 Dijkstrala算法查找图中从一个节点到另一个节点的最短路径&#xff0c;输出结果是最短路径以及长度。算法执行的前提条件是权重不能是负数。 起始顶点记为sid&#…

链表题目汇总(python3)

1、从头到尾打印链表 输入一个链表&#xff0c;按链表值从尾到头的顺序返回一个ArrayList。 # -*- coding:utf-8 -*- class ListNode:def __init__(self, x):self.val xself.next Noneclass Solution:def printListFromTailToHead(self, listNode):l []while listNode:l.appe…