LK27移除元素

26 阅读1分钟

第一次错误代码:

public int removeElement(int[] nums, int val) {
    int len=nums.length;
    int i,j=len-1;
    for(i=0;i<len;i++){
        if(nums[i]==val){
            nums[i]=nums[j];
            nums[j--]=-1;
        }
    }
    for(i=0;i<len;i++){
        if(nums[i]==-1){
            break;
        }
    }
    return i;
}

测试用例中第一个等于val的值没有删除,定位到 nums[i]=nums[j],在换值之后应该重复本次i值得循环,因为nums[i]的值换后已经变为了nums[j]也就是数组末尾的值,需要再次对nums[i]判断;

通过代码:

public int removeElement(int[] nums, int val) {
    int len=nums.length;
    int i,j=len-1;
    for(i=0;i<len;i++){
        if(nums[i]==val){
            nums[i--]=nums[j];
            nums[j--]=-1;
        }
    }
    for(i=0;i<len;i++){
        if(nums[i]==-1){
            break;
        }
    }
    return i;
}

题目链接[:](27. 移除元素 - 力扣(LeetCode))