LeetCode 283. Move Zeroes
class Solution {
public:
void moveZeroes(vector<int>& nums) {
//[0,j)存非0元素,i表示待访问的元素,[j,i)存0元素
int j = 0;
for(int i=0; i<nums.size(); i++)
{
if(nums[i])
{
if(j != i)
swap(nums[j++],nums[i]);
else
j++;
}
}
}
};
LeetCode 27. Remove Element
法一:
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
//[0,k)存非val元素,i表示待访问的元素,[k,i)存val元素
int k = 0;
for(int i=0; i<nums.size(); i++)
{
if(nums[i] != val)
{
if(k != i)
nums[k++] =nums[i];
else
k++;
}
}
return k;
}
};
法二:
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
//cnt计等于val的个数
int cnt = 0;
for(int i=0; i<nums.size(); i++)
{
if(nums[i] == val)
cnt++;
else
nums[i-cnt]=nums[i];
}
return nums.size()-cnt;
}
};
LeetCode 26. Remove Duplicates from Sorted Array
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
if(nums.empty()) return 0;
//[0,k)存非重复元素,i表示待访问的元素与nums[k-1]进行比较,判断是否为重复元素
int k = 1;
for(int i=1; i<nums.size(); i++)
{
if(nums[i] != nums[k-1])
{
if(k != i)
nums[k++] = nums[i];
else
k++;
}
}
return k;
}
};
LeetCode 80.Remove Duplicates from Sorted Array II
法一:
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
if(nums.empty()) return 0;
//[0,k)存非重复元素,i表示待访问的元素与nums[k-1]进行比较,判断是否为重复元素
int k = 1;
//cnt计数重复元素的个数,初始值为nums[0]的重复次数1
int cnt = 1;
for(int i=1; i<nums.size(); i++)
{
if(nums[i] != nums[k-1])
{
if(k != i)
nums[k++] = nums[i];
else
k++;
cnt = 1;
}
else //nums[i] == nums[k-1]
{
if(cnt < 2)//cnt==1
{
nums[k++] = nums[i];
cnt++;
}
else //cnt==2
continue;
}
}
return k;
}
};
法二:
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
//[0...k)保存最后元素
int k = 0;
for( int i = 0 ; i < nums.size() ; i++ ){
if( k < 2 || nums[i] != nums[k-2] ){
nums[k++] = nums[i];
}
}
return k;
}
};