每日一题---OJ题1: 移除元素

嗨,小伙伴们大家好! 我们一起来练习一道OJ题目吧!

咋一看这个题目好像看懂了,让我们来分析分析-------

我们假设数组nums里面的元素有4个,分别是3,2,2,3,val = 3。我们需要原地移除所有数值等于val的元素,也就是说,我们需要在这个数组里面找到"3",然后用数组中的其他值去覆盖这个元素。

我们在nums数组里面找到"3",这里首元素为"3",后面的元素依次向前移动,nums数组的前两个元素均为"2"。此时,数组返回的新的长度为2。

思路1:(在原数组上直接覆盖val)先定义变量i,用i去遍历原数组的每一个元素,再定义变量j,用它来遍历原数组的每一个元素,当nums[j]不等于val的值,j自增一次; 当num[j]等于val的值,直接跳过,最后返回j刚好是数组的新长度。

整体代码如下:

int removeElement(int* nums, int numsSize, int val) {
    int i = 0;
    int j = 0;
    for(i = 0; i<numsSize; i++){
        if(nums[i] != val){
            nums[j] = nums[i];
            j++;
        }
    }
    return j;
}
思路2: (双指针法)定义一个src变量,一个dest变量,(不是真的指针,而是两个变量),刚开始的时候,dest和src都指向首元素(下标为0的位置)。

如果src指向的元素等于val,src++,src指向下一个元素。

如果src指向的元素不等于val,那么就把src指向元素的值赋值给dest指向的元素(src位置的值进行覆盖)。src指向下一个元素,dest指向下一个元素。(src++,dest++)。

此时,src已经超出数组的长度,循环到此结束,而dest刚好是移除元素后,数组的新长度。

具体代码如下:

int removeElement(int* nums, int numsSize, int val) {
    int src = 0;
    int dest = 0;
    while(src < numsSize){
        if(nums[src] == val){
            src++;
        }else{
            nums[dest] = nums[src];
            dest++;
            src++;
        }
    }
    return dest;
}

好啦,今天的讲解就到这里啦,我们下期再见!

  • 7
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值