LeetCode T41 First Missing Positive

news/2024/11/28 5:30:36/

文章目录

  • 题目地址
  • 题目描述
  • 思路
  • 题解

题目地址

https://leetcode-cn.com/problems/first-missing-positive/

题目描述

Given an unsorted integer array nums, find the smallest missing positive integer.

Follow up: Could you implement an algorithm that runs in O(n) time and uses constant extra space.?

Example 1:

Input: nums = [1,2,0]
Output: 3

Example 2:

Input: nums = [3,4,-1,1]
Output: 2

Example 3:

Input: nums = [7,8,9,11,12]
Output: 1

Constraints:

  • 0 <= nums.length <= 300
  • -2^31 <= nums[i] <= 2^31 - 1

思路

本题要求O(n)的时间复杂度和常数的空间复杂度,这导致我们不能用排序,排序至少也要nlogn。
如果借用哈希表,我们的空间复杂度又不满足要求。
因此我们借用哈希表的思路,然后借用原数组的空间实现本题。

如果数字1出现了我们就把第一个数设置为负数,2出现了就将第二个数组设置为负数,最后第一个非负数的位置就是我们缺失的值的位置了。

题解

class Solution {public int firstMissingPositive(int[] nums) {boolean no_one = true;for(int i=0;i<nums.length;++i){if(nums[i]==1) no_one = false;if(nums[i]<=0||nums[i]>nums.length)nums[i] = 1;}int i;if(no_one) return 1;//现在数组里全是正数for(i=0;i<nums.length;++i){//将出现的数的索引处的值改为负数,表示有了nums[Math.abs(nums[i])-1] = -Math.abs(nums[Math.abs(nums[i])-1]); }for(i=0;i<nums.length;++i){if(nums[i]>0) break; }return i+1;}
}

http://www.ppmy.cn/news/374387.html

相关文章

OpenJudge NOI 1.5 编程基础之循环控制(41-45题)C++ 解题思路

续上一篇文章 https://blog.csdn.net/leleprogrammer/article/details/127164315https://blog.csdn.net/leleprogrammer/article/details/127164315剩下最后5道题&#xff0c;继续鸭~~ 目录 41 数字统计 42 画矩形 43 质因数分解 44 第n小的质数 45 金币 41 数字统计 #inc…

君正Zeratul开发(6)——为什么禁止使用system

(一)前言 在君正Zeratul_T31_开发指南中明确规范&#xff0c;禁止在主程序中使用system 等系统调用接口函数&#xff0c;需要在另外的一个守护进程中去实现system函数的功能。这里有两个问题&#xff1a;1.system函数有哪些不安全的地方&#xff1f; 2.为什么不可以在主进程中去…

Array-T41. First Missing Positive

Problem&#xff1a;Given an unsorted integer array, find the smallest missing positive integer. Note: Your algorithm should run in O(n) time and uses constant extra space. Solve&#xff1a;(复杂度为O(nlogn)) Thought&#xff1a;由于所给的列表为无序列表&am…

T41:单词的翻转(Java)

t题目&#xff1a;牛客最近来了一个新员工Fish&#xff0c;每天早晨总是会拿着一本英文杂志&#xff0c;写些句子在本子上。同事Cat对Fish写的内容颇感兴趣&#xff0c;有一天他向Fish借来翻看&#xff0c;但却读不懂它的意思。例如&#xff0c;“student. a am I”。后来才意识…

剑指offer T41 数据流的中位数

中位数就是所有数值排序!!!之后位于中间的数值 既然要对所有元素进行排序&#xff0c;考虑使用自带排序的容器&#xff1a;然后TreeSet和TreeMap都不适合 那考虑使用堆来做 思想&#xff1a; 建立两个堆&#xff0c;一个大顶堆lowHeap&#xff0c;一个小顶堆 highHeap 其中大顶…

力扣LeetCode(二)T41-T80

文章目录 41.缺失的第一个正数42.接雨水43.字符串相乘44.通配符匹配45.跳跃游戏 II &#xff08;贪心&#xff09;46.全排列&#xff08;两种模板&#xff09;47.全排列 II&#xff08;序列不重模板&#xff09;48.旋转图像49. 字母异位词分组50.pow(x,n) &#xff08;快速幂&a…

T41 (i7 集显)安装黑苹果

主体参照http://bbs.pcbeta.com/forum.php?modviewthread&tid1566555 注意那个盘符一定要AF 转载于:https://www.cnblogs.com/souroot/p/4537504.html

剑指offer T41

#include <iostream> using namespace std; void printfcontinuesequence(int a,int b)//打印序列 {for(int ia;i<b;i)cout<<i<< ;cout<<endl; } void findcontinuesequence(int sum) //找序列 {if(sum<3)return;int small 1;int large 2;int …