给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使得出现次数超过两次的元素只出现两次 ,返回删除后数组的新长度。
不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。
示例 1:
输入:[7,1,5,3,6,4]
输出:5
解释:在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。
注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格;同时,你不能在买入前卖出股票。
示例 2:
输入:prices = [7,6,4,3,1]
输出:0
解释:在这种情况下, 没有交易完成, 所以最大利润为 0。
提示:
1 <= prices.length <= 105
0 <= prices[i] <= 104
ans.
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
int n =nums.size();
if(n <= 2) return n;
int slow = 2,fast = 2;
// slow指向下一个待插入元素的下标
while(fast < n){
if(nums[fast] != nums[slow-2]){
nums[slow++] = nums[fast];
}
fast++;
// fast 不要放在if(nums[fast]...里++,这么做可以防止溢出
}
return slow;
}
};