这一类题目的前提是:例如,一个数组S,S={1,2,3,4,5}是最终状态,给定我们任意一个长度为5的不重复数组a,a中每个数字都在[1,5]区间,那么我们通过多次交换可以得到{1,2,3,4,5}的排序顺序。这里格外注意交换的顺序问题,不可以使用STL的swap函数
模板:
for(int i = 0;i < nums.size();i ++){
if(nums[i] == i + 1){
continue;
}
while(nums[i] > 0 && nums[i] <= Length && nums[i] != nums[nums[i] - 1]){
int temp = nums[nums[i]-1];
nums[nums[i]-1] = nums[i];
nums[i] = temp;
}
}
41. First Missing Positive
Hard
2037644FavoriteShare
Given an unsorted integer array, find the smallest missing positive integer.
Example 1:
Input: [1,2,0] Output: 3
Example 2:
Input: [3,4,-1,1] Output: 2
Example 3:
Input: [7,8,9,11,12] Output: 1
class Solution {
public:
int firstMissingPositive(vector<int>& nums) {
if(nums.size() == 0){
return 1;
}
int Length = nums.size();
for(int i = 0;i < nums.size();i ++){
if(nums[i] == i + 1){
continue;
}
while(nums[i] > 0 && nums[i] <= Length && nums[i] != nums[nums[i] - 1]){
int temp = nums[nums[i]-1];
nums[nums[i]-1] = nums[i];
nums[i] = temp;
}
}
int index = 0;
for(;index < Length;index ++){
if(nums[index] != index + 1){
break;
}
}
return index + 1;
}
};