leetcode 41. First Missing Positive
来源:互联网 发布:比淘宝好的购物网站 编辑:程序博客网 时间:2024/05/29 02:21
题意:
给你一个乱序的数组,让你找出第一个缺失的正整数(原数组可能包含0和负整数),
思路:
题目要求时间复杂度为O(n),空间复杂度为O(1),所以只能借助原数组的空间来求解,很容易想到用下标来标记有没有出现。
即把出现过的整数的对应的下标的值变为负值,但原数组有负数和0干扰(当一个值为负时,不知他是原数组的初始值,还是标记后的值;0的负数依然是0)
又因为,缺失的数必定小于等于数组的长度len+1,所以可以先预处理一遍,把0和和负数的值变为len+1;
JAVA代码:
class Solution { public int firstMissingPositive(int[] nums) { int len = nums.length; for(int i = 0;i<len;i++){ if(nums[i]<=0){ nums[i] = len+1; } } for(int i = 0;i<len;i++){ int temp = Math.abs(nums[i]); if(temp<=len){ if(nums[temp-1]>0){ nums[temp-1] *= -1; } } } for(int i = 0;i<len;i++){ if(nums[i]>0){ return i+1; } } return len+1; }}
阅读全文