27题
#include <iostream>
#include<string>
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
//时间复杂度 O(n)
//空间复杂度 O(n)
vector<int> noVal;
for (int i = 0; i < nums.size(); i++)
if (nums[i] != val)
noVal.push_back(nums[i]);
for (int i = 0; i < noVal.size(); i++)
nums[i] = noVal[i];
for (int i = noVal.size(); i < nums.size(); i++)
nums[i] = val;
return noVal.size();
//时间复杂度O(n)
//空间复杂度O(1)
int k = 0; //k表示数组中不为val的个数
for (int i = 0; i < nums.size(); i++)
if (nums[i] != val)
nums[k++] = nums[i];
for (int i = k; i < nums.size(); i++)
nums[i] = val;
return k;
//时间复杂度O(n)
//空间复杂度O(1)
int k = 0;
for (int i = 0; i < nums.size(); i++)
if (nums[i] != val)
{
if (k != i)
swap(nums[k++], nums[i]);
else
k++;
}
return k;
}
};
int main()
{
int arr[] = { 0,1,2,2,3,0,4,2 };
vector<int> vec(arr, arr + sizeof(arr) / sizeof(int));
Solution().removeElement(vec, 2);
for (int i = 0; i < vec.size(); i++)
cout << vec[i] << " ";
cout << endl;
return 0;
}
26. Remove Duplicates from Sorted Array
#include <iostream>
#include<string>
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
if (nums.size() == 0)
return 0;
if (nums.size() == 1)
return 1;
int k = 0;//[0.....k)是K个不重复的元素
for (int i = 1; i < nums.size(); i++)
if (nums[i] != nums[k])
nums[++k] = nums[i];
return k+1;
}
};
int main()
{
int arr[] = { 1,1,2 };
vector<int> vec(arr, arr + sizeof(arr) / sizeof(int));
int k= Solution().removeDuplicates(vec);
cout << "不重复的元素个数:" << k << endl;
for (int i = 0; i < vec.size(); i++)
cout << vec[i] << " ";
cout << endl;
return 0;
}
#include <iostream>
#include<string>
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
if (nums.size() == 0)
return 0;
if (nums.size() == 1)
return 1;
if (nums.size() == 2)
return 2;
int k = 0; //[0.....k)表示前K个重复个数小于等于2的元素
int count = 1;
for (int i =1; i < nums.size(); i++)
{
if (nums[k] == nums[i])
{
if (count == 1)
{
nums[++k] = nums[i];
}
count++;
}
else
{
count = 1;
nums[++k] = nums[i];
}
}
return k + 1;
}
};
int main()
{
int arr[] = { 0,0,1,1,1,1,2,3,3 };
vector<int> vec(arr, arr + sizeof(arr) / sizeof(int));
int k= Solution().removeDuplicates(vec);
cout << "不重复的元素个数:" << k << endl;
for (int i = 0; i < vec.size(); i++)
cout << vec[i] << " ";
cout << endl;
return 0;
}