考察知识点: 数组、双指针
题目分析:
可以通过双指针解决题目。首先用指针i遍历整个数组,指针j用来改变数组。每当i遍历到val时,总是让j停下来一步,当指针i指向的值不是val时就覆盖到指针j所指向的数组上。例如:2 1 3 5 7 1 1 1 6 9, val = 1
一开始i和j的指针位置相同,而当i指向val时,j指针就会停下来一步:
此时发现i指向的数据为3,将3覆盖到指针j指向的位置即可。之后发现将i的指针赋值到j的位置时,相当于数组往前移动1位,即找到多少个val后,j与i之间就会相差多少,数组就能前移多少。
所用编程语言:C++
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param nums int整型vector
* @param val int整型
* @return int整型
*/
int remove_cows(vector<int>& nums, int val) {
// write code here
int i = 0, j = 0;
int size = nums.size();
for (int i = 0; i < size; i++) {
if (nums[i] != val) {
nums[j] = nums[i];
j++;
}
}
return j;
}
};

京公网安备 11010502036488号