leetcode —— 41. 缺失的第一个正数
给你一个未排序的整数数组,请你找出其中没有出现的最小的正整数。
示例 1:
输入: [1,2,0]
输出: 3
解题思路:
- 判断数组中是否存在1,如果没有1则直接返回1,结束;
- 如果数组长度为1,同时数组中存在1,则直接返回2,结束;
- 将数组中小于1或者大于数组长度length的数变为1;
- 根据nums[i]的值将nums[nums[i]]对应的数变为负数,表示数组中存在该正数;因为nums[i]的值可能超过数组边界,因此当nums[i]=length时,使nums[0]变为负数;
- 遍历数组,当数组中某一个位置的值为正数,表示数组中缺少该位置值的整数,返回该位置的index,结束;注意nums[0]表示的是数组中是否存在length这个正数;
- 如果数组全为负数,则返回length+1,结束;
# Python3
class Solution:def firstMissingPositive(self, nums: List[int]) -> int:if not nums: # 如果数组为空,返回1return 1length = len(nums) # 计算数组的长度if 1 not in nums: # 如果1不在数组中,返回1return 1if length == 1: # 如果1在数组中,同时数组长度为1,则直接返回2return 2for i in range(length): # 数组中存在1,同时将小于1或者大于数组长度的值变为1if nums[i]<=0 or nums[i]>length:nums[i] = 1# 将nums[i]对应的nums[nums[i]]变为负数,表示nums中存在nums[i]整数# 因为nums[i]可能等于length,这超出了数组的范围,因此当nums[i]==length时,令nums[0]变为负数,nums[0]为负数表示数组nums中存在length这个正数for i in range(length):temp = abs(nums[i])if temp == length:nums[0] = -abs(nums[0])else: nums[temp] = -abs(nums[temp])# 遍历数组,从1开始,如果存在nums[i]大于0,则直接返回1for i in range(1,length):if nums[i] > 0:return i# 判断nums[0]是否大于零,因为nums[0]为负数表示数组中存在正数length# 当nums[0]大于零时,则返回lengthif nums[0]>0:return length# 如果数组中前length个整数都存在,则返回length+1这个正数return length+1
class Solution {public:int firstMissingPositive(vector<int>& nums) {if(nums.empty())return 1;int length = nums.size();if(std::find(nums.begin(),nums.end(),1)==nums.end())return 1;if(length==1)return 2;for(int i=0;i<length;++i){if(nums[i]<=0 || nums[i]>length)nums[i] = 1;}for(int i=0;i<length;++i){int temp = abs(nums[i]);if(temp<length)nums[temp] = -(abs(nums[temp]));elsenums[0] = -(abs(nums[0]));}for(int i=1;i<length;++i){if(nums[i]>0)return i;}if(nums[0]>0)return length;return length+1;}
};
leetcode —— 41. 缺失的第一个正数相关推荐
- Java实现 LeetCode 41 缺失的第一个正数
41. 缺失的第一个正数 给定一个未排序的整数数组,找出其中没有出现的最小的正整数. 示例 1: 输入: [1,2,0] 输出: 3 示例 2: 输入: [3,4,-1,1] 输出: 2 示例 3: ...
- LeetCode 41. 缺失的第一个正数
文章目录 1. 题目信息 2. 思路 3. 代码 1. 题目信息 给定一个未排序的整数数组,找出其中没有出现的最小的正整数. 示例 1:输入: [1,2,0] 输出: 3 示例 2:输入: [3,4, ...
- LeetCode 41. 缺失的第一个正数 First Missing Positive
给定一个未排序的整数数组,找出其中没有出现的最小的正整数. 示例 1: 输入: [1,2,0] 输出: 3 示例 2: 输入: [3,4,-1,1] 输出: 2 示例 3: 输入: [7,8,9,11 ...
- Leetcode 40组合总数(回溯)Ⅱ41缺失的第一个正数42接雨水
维护公众号:bigsai ,回复进群加入打卡,回复bigsai分享一些学习资源! 上周第一次 LeetCode 36有效的数独&37解数独(八皇后问题) 上周第二次 LeetCode 38外观 ...
- Leetcode算法Java全解答--41. 缺失的第一个正数
Leetcode算法Java全解答–41. 缺失的第一个正数 文章目录 Leetcode算法Java全解答--41. 缺失的第一个正数 题目 想法 结果 总结 代码 我的答案 大佬们的答案 测试用例 ...
- 41. 缺失的第一个正数 golang
41. 缺失的第一个正数 给你一个未排序的整数数组,请你找出其中没有出现的最小的正整数. 示例 1: 输入: [1,2,0] 输出: 3 示例 2: 输入: [3,4,-1,1] 输出: 2 示例 3 ...
- 努力前端【LeetCode-10】448. 找到所有数组中消失的数字 442. 数组中重复的数据(中等) 41. 缺失的第一个正数(困难) [鸽笼原理,数组,Map,类似No.645]
文章目录 题目描述-448 一.哈希Map 二.空间复杂度的优化--鸽笼原理 三.总结 题目描述-442 一.还是hashMap 二.继续鸽笼原理 题目描述-41 一.基础方案 二.数组模拟Map 题 ...
- 【LeetCode笔记】41. 缺失的第一个正数(Java、哈希)
文章目录 题目描述 思路 & 代码 题目描述 难点在于时空复杂度的要求 想出最优方法,需要认真理解题目. 思路 & 代码 做法:建立一个逻辑上的哈希表,令 nums[i] = i + ...
- 41,缺失的第一个正数
解题思路 一,暴力肯定不可取,时间要O(n^2) 二,sort一遍也不行,空间要O(n) 三,时间要O(n),空间常数,只能找方法. 可以想到,如果每个数字刚好对应那个 空间地址(nums[i]==i ...
最新文章
- python读写csv确定编码格式_Python使用utf8编码读写csv文件
- golang正则表达式
- 深入浅出UML类图(四)
- dll动态库调用约定
- 嵌入式linux通过DHCP自动获取IP地址实现
- python encode和decode函数说明
- 是的,又一次立FLAG了
- Kafka从上手到实践 - 实践真知:搭建Kafka相关的UI工具 | 凌云时刻
- 南阳理工计算机与科学技术,南阳理工学院计算机与信息工程学院
- 通俗地理解贝叶斯公式(定理)
- 写给后端程序员的前端开发流程与正确姿势.
- 好心情“沉浸式VR静心疗愈—荷塘月色”第二期企业沙龙活动圆满收官
- 2021年井冈山中学高考成绩查询入口,【高考成绩】2019年高考成绩揭晓,井冈山中学取得好成绩!...
- 深入Java虚拟机(五)垃圾收集
- Waymo无人车设立中国全资子公司,取名慧摩,与谷歌上海同楼办公
- 做一个广告业务后台需要几天,5天吗?不,用PhalApi开源框架,1天就能做好
- 直播系统源码搭建、手机直播源码APP平台开发制作
- 《房债》书中的精髓:现代金融系统让全世界的人同处一艘经济大船上,一些人搞坏了船,所有的人都跟着遭殃。
- Ubuntu 16.04下安装配置Trac项目管理工具
- python模糊搜索_在Python中使用Whoosh进行模糊搜索
热门文章
- slf4j 与log4j 日志管理
- 面试官系统精讲Java源码及大厂真题 - 24 举一反三:队列在 Java 其它源码中的应用
- Redis面试 - redis 都有哪些数据类型?
- UC神马数据采集api
- 【Python】编写一个类,求圆的周长和面积
- “SqlNullValueException: Data is Null. This method or property cannot be called on Null values.”的解决方案
- C#LeetCode刷题之#686-重复叠加字符串匹配(Repeated String Match)
- C#LeetCode刷题-双指针
- mysql view在测试过程的应用
- chrome 全屏截图_如何在不带扩展功能的Chrome中拍摄全屏截图