解题思路:
在这个特殊的意义刷一道中等题真的幸福度拉满,这道题的本意就是求一个尽可能小的界限,界限左边的数都比右边的数小,那么我们可以定义双指针,左指针为了定界,右指针就不断向右找,用一个变量存储当前左区间最大的数,一旦发现右指针指向的位置比左区间最大值小,那么左指针就将界限拉到右指针位置,右指针继续向下找,代码如下:
class Solution {
public:
int partitionDisjoint(vector<int>& nums) {
int n = nums.size();
int maxNum = nums[0], left = 0, right = 1;
int curMax = maxNum;
while(right < n) {
while(right < n && nums[right] >= maxNum) {
curMax = max(curMax, nums[right]);
right ++;
}
if(right == n) {
break;
}
left = right;
maxNum = curMax;
right ++;
}
return left + 1;
}
};