自己写的过程中遇到的问题记录
- 暴力解法
执行结果:超出时间限制
(猜测问题出在nums.size()没有减小)
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
int num=0;
for (int i = 0 ; i< nums.size() ;i++){
if (nums[i] == val) {
num++;
for(int j = i ; j < nums.size()-1; j++){
nums[j]= nums[j+1];
};
i--; 因为下标i以后的数值都向前移动了一位,所以i也向前移动一位 (第一次写也无此句,会报解答错误)
};
};
return (nums.size()-num);
}
};
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
int size = nums.size();
for (int i = 0 ; i< size ;i++){
if (nums[i] == val) {
for(int j = i+1 ; j < size; j++){
nums[j-1]= nums[j];
};
i--; 因为下标i以后的数值都向前移动了一位,所以i也向前移动一位
size --;
};
};
return size;
}
};
- 快慢指针
注:此处的快慢指针并不是指针变量,而是数组的下标
class Solution{
public:
int removeElement(vector<int> & nums , int val){
int fast = 0; // 此处并不是指针类型,刚开始看思路的时候,写成了 int *fast = nums;
int slow = 0;
for(fast =0 ; fast < nums.size(); fast++){
if(nums[fast]!=val){
nums[slow] = nums[fast];
slow ++;
}
}
return slow;
}
};
- 输入输出处理
- 输入输出示例
- 输入
// 输出不确定大小的数组
vector <int> nums;
int num;
while (cin >> num) {
nums.push_back(num);
if ('\n' == cin.get())
{
break;
}
}
int val; cin >> val;
for (int k = 0; k < size; k++) {
cout << nums[k] << ' ';
}
- ACM模式
#include <iostream>
#include <vector>
using namespace std;
class Solution {
public:
int removeElement(vector<int> & nums, int val) {
int fast = 0; // 此处并不是指针类型,刚开始看思路的时候,写成了 int *fast = nums;
int slow = 0;
for (fast = 0; fast < nums.size(); fast++) {
if (nums[fast] != val) {
nums[slow] = nums[fast];
slow++;
}
}
return slow;
}
};
int main() {
// 输出不确定大小的数组
vector <int> nums;
int num;
while (cin >> num) {
nums.push_back(num);
if ('\n' == cin.get())
{
break;
}
}
int val; cin >> val;
Solution Solution;
int size = Solution.removeElement(nums, val);
for (int k = 0; k < size; k++) {
cout << nums[k] << ' ';
}
return 0;
}