No.26, Remove Duplicates from Sorted Array
No.27, Remove Element
第一个题是给定一个已经排序的数组,去掉里面所有重复的数字,返回新长度。
这道题不用处理新长度之后的数组元素。那么只需要把不重复的往前面写即可,使用一个计数器看现在写到数组的哪一个位置了,每遍历到一个新数字,则将计数器向后挪一个。最后长度也就是计数器的值。
class Solution { public: int removeDuplicates(vector<int>& nums) { if(nums.empty()){ return 0; } int lastnumber=nums[0]; int number_point=1; for(int i=1;i<nums.size();i++){ if(lastnumber!=nums[i]){ lastnumber=nums[i]; nums[number_point]=nums[i]; number_point++; } } return number_point; } };
第二个题是给定一个数组和一个值,把数组中的该值都去掉,返回一个修改后的数组和数组长度。
跟第一题类似,可以采用一个个遍历再写的方法。当然如果不要求顺序,也可以在效率上采用把最后的元素往前面填坑的方法。
class Solution { public: int removeElement(vector<int>& nums, int val) { if(nums.empty()){ return 0; } int number_point=0; int count=0; for(int i=0;i<nums.size();i++){ if(nums[i]!=val){ nums[number_point]=nums[i]; number_point++; count++; } } return count; } };