41. 缺失的第一个正数 原地哈希
难度:困难
题目描述
解题思路
受空间和时间复杂度的限制,所以用原地哈希算法
哈希函数很简单,就是在下标i的地方放i+1
比如例子:3 4 -1 1
交换过程是:
交换-1<->3
交换1<->4
交换-1<->1
1 -1 3 4
结果 2
交换之后1 3 4全在正确的位置上,2不在
/*
* 41. 缺失的第一个正数
* 2020/6/27每日一题 原地哈希
*/
public static 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]) { //如果不在正确的范围内
int temp = nums[i];
nums[i] = nums[nums[i]-1];
nums[temp-1] = temp;
}
}
for (int i = 0; i < nums.length; i++) {
if(nums[i] != i+1) {
return i+1;
}
}
return n;
}