首页 > 编程知识 正文

找到数组中未出现的最小正整数,为什么没有最小的正整数

时间:2023-05-05 12:13:56 阅读:184554 作者:3099

题目描述:

给定一个无序整型数组arr,找到数组中未出现的最小整数
例子

arr=[-1,2,3,4] return 1
arr=[1,2,3,4] return 5

时间复杂度O(n) 空间复杂度O(1)

解题思路: (1) arr为整数1,2,3…N的一个随机排列,那个未出现的最小正整数就是N+1。

(2) arr中有小于1或者大于N的数出现(我们称之为“不合法”的数),则未出现的最小正整数一定在1到N中间(因为数组一共只有N个数,如果出现不合法的数,则出现的1到N之间的数的个数一定小于N,故一定有没有出现的数)。

实现函数

int missNum(vector<int> nums){ int l = 0; // 1-l 已经有 int r = nums.size(); // l+1-r想要有 while (l < r) { if (nums[l] == l + 1) { l++; } // nums[l] 减去 1 表示数nums[l] 应该在的位置 else if (nums[l] < l + 1 || nums[l] > r || nums[nums[l] - 1] == nums[l]) { r--; nums[l] = nums[r]; } else{ swap(nums[l], nums[nums[l] - 1]); } } return l + 1;} 12345678910111213141516171819202122

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。