原地移除数组nums中所有等于val的元素,并返回数组的新长度,元素顺序可变,不需考虑数组中超出新长度后面的元素。要求空间复杂度为O(1)。
//第一次尝试:
//此问题使用了双指针的方法进行解决,size定位到等于val的位置,i用来向后遍历每一个元素,如果是val,则i++,如果不等于val,则将这个值放到size的位置,然后size++;
//这样就可以将不等于val的值,依次从数组的首位置向后皮排列;
#include<stdio.h> #include<stdlib.h> int removeElement(int* nums, int numsSize, int val) { int size = 0; for (int i = 0; i < numsSize; i++) { if (nums[i] != val) { nums[size] = nums[i]; size++; } } return size; } int main() { int num[] = { 2,4,9,6,9,8,1 }; int n = 9; int ret = removeElement(num, sizeof(num) / sizeof(num[0]), n); for (int i = 0; i < ret; i++) { printf("%d\n", num[i]); } return 0; }
原文:https://www.cnblogs.com/zhm521/p/14105029.html