不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。
元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。
示例 1:
输入:nums = [3,2,2,3], val = 3
输出:2, nums = [2,2]
解释:函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。你不需要考虑数组中超出新长度后面的元素。例如,函数返回的新长度为 2 ,而 nums = [2,2,3,3] 或 nums = [2,2,0,0],也会被视作正确答案。
#include<stdio.h>
#include<stdlib.h>
#define N 10
int removeElement(int* nums, int numsSize, int val){
int k=0,i;
for(i=0;i<numsSize;i++)
{
if(nums[i]!=val)
{
nums[k]=nums[i];
k++;
}
}
return k;
}
int main()
{
int nums[N]={1,2,2,2,3,3,4,5,5,0};
int numsSize=N;
int val;
scanf("%d",&val);
int len=removeElement(nums,numsSize,val);
printf("%d ",len);
return 0;
}
#include<stdio.h>
int removeElement(int* nums, int numsSize, int val)
{
int src = 0;
int dst = 0;
while (src < numsSize)
{
if (nums[src] != val)
{
nums[dst++] = nums[src++];
}
else
{
++src;
}
}
return dst;
}
int main()
{
int nums [4]= {3,2,2,3};
int len = removeElement(nums, 4, 3);
for (int i = 0; i < len; i++)
{
printf("%d ",nums[i]);
//printf("%d ", copy[i]);//思路二里的全局变量
}
return 0;
}
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!