#include<iostream> #include<vector> using namespace std; int main() { int n; cin >> n; vector<int> nums; int num; while(n-- > 0) { cin >> num; nums.push_back(num); } int left = 0;// 已经出现的数 int right = nums.size();// 右边界,不可能是最小未出现的正整数 while(left < right) { if(nums[left] == left + 1) {// 出现新的最小正整数 left++; } else if(nums[left] <= left || nums[left] > right || nums[nums[left] - 1] == nums[left]) { // 已经出现的数 || 不可能的结果 || 当前数应该在的位置上就是该数 nums[left] = nums[--right]; } else swap(nums[left], nums[nums[left] - 1]);// 把left位置数移到正确的位置上,上边判断需要排除这两个位置的数相等的情况 } cout << left + 1 <<endl; return 0; }