【leetcode】 26 删除有序数组中的重复项
难度类型:简单
给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。
不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。
思路:
最直接的想法是使用 双指针,一个指针(i)用来遍历整个数组,另一个指针(index)用来指向有效数组的位置。由于是有序数组(升序),i指向的值一定大于index指向的值,否则i指向的值无效。若为降序,i指向的值一定小于index指向的值。
当判断到i指向的值有效时,将index位置+1,并给此时指向的位置赋上i指向的值。
当i遍历完整个输入数组后,返回index+1为最终有效值的长度。
tips:第一次提交没有通过,报错在当输入数组长度为0时,返回值是1,因此需要对此情况进行规避。
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
int index = 0;
if(nums.size() == 0) {
return 0;
}
for(int i = 0; i < nums.size(); i++) {
if(nums[i] <= nums[index]) {
continue;
} else {
nums[++index] = nums[i];
}
}
return index+1;
}
};