【力扣】27.移除元素

27.移除元素

力扣题目:27.移除元素

这道题,我首先的思路是对元素进行循环,从下标0开始循环,一直到length-1,然后取出数组的值和val进行比较,当相等的时候,将nums[length-1]赋值给当前数组下标对应的数值,然后将length–,最后返回length,即目前新数组的长度,但是这里的致命错误就是没有考虑nums[length-1]是否等于val,如果不等于val那么需要再次移动,直到不等于后才能赋值。

错误代码:

class Solution {

    public int removeElement(int[] nums, int val) {
        int i;
        int length = nums.length;
        // 忘记了for循环应该是先初始化,再条件,然后在迭代i++
        for(i = 0; i < length; i++){
            if(nums[i] == val){
                nums[i] = nums[length - 1];
                // 简写length = length - 1 是 写成了length -= length 导致结果为0
                length -= 1 ;
            }
        }
        return length;
    }

}

修改以上代码

class Solution {

    public int removeElement(int[] nums, int val) {
        int left = 0;
        int rigth = nums.length - 1;
        while(left <= rigth){
            if(nums[rigth] == val){
                rigth--;
                continue;
            }
            if(nums[left] == val){
                nums[left] = nums[rigth];
                rigth--;
            }
            left++;
        }
        return rigth + 1;
    }

}

修改后的代码还是不够完美,因为牺牲了空间获取时间。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值