考察知识点: 数组、双指针
题目分析:
可以通过双指针解决题目。首先用指针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; } };