LeetCode26. 删除排序数组中的重复项
给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。
不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。
我一开始的方法
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
unsigned int newlen;
int k;
newlen=nums.size();
if(newlen==0||newlen==1) return newlen;
for(int i=0;i<newlen-1;i++){
k=0;
for(int j=i+1;j<newlen;j++){
if(nums[j]==nums[i]){
k++;
}
else
break;
}
if(k>0){
newlen+=-k;
for(int j=i;j<newlen;j++)
nums[j]=nums[j+k];
}
}
return newlen;
}
};
执行用时 : 540 ms, 在Remove Duplicates from Sorted Array的C++提交中击败了5.02% 的用户
内存消耗 : 10 MB, 在Remove Duplicates from Sorted Array的C++提交中击败了76.22% 的用户
法二:非常巧妙
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
int j=0;
int len=nums.size();
if(len==0) return 0;
for(int i=1;i<len;i++){
if(nums[i]!=nums[j])
nums[++j]=nums[i];
}
return j+1;
}
};
执行用时 : 32 ms, 在Remove Duplicates from Sorted Array的C++提交中击败了95.19% 的用户
内存消耗 : 10.1 MB, 在Remove Duplicates from Sorted Array的C++提交中击败了72.95% 的用
给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度。
不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。
元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
int len=nums.size();
int j=0;
for(int i=0;i<len;i++){
if(nums[i]!=val){
nums[j++]=nums[i];
}
}
return j;
}
};
执行用时 : 4 ms, 在Remove Element的C++提交中击败了98.45% 的用户
内存消耗 : 8.5 MB, 在Remove Element的C++提交中击败了91.44% 的用户