leetcode:27. 移除元素 (c++,附有输入输出处理)

自己写的过程中遇到的问题记录

  1. 暴力解法
  • 执行结果:超出时间限制 (猜测问题出在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;
    }
};
  1. 快慢指针
    注:此处的快慢指针并不是指针变量,而是数组的下标
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;
    }
};
  1. 输入输出处理
  • 输入输出示例
    在这里插入图片描述
  • 输入
	// 输出不确定大小的数组
	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] << ' ';
	}
  1. 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;
}

在这里插入图片描述在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_43686259/article/details/130472369