其他分享
首页 > 其他分享> > LeetCode27.移除元素

LeetCode27.移除元素

作者:互联网

/**
* 给你一个数组 nums和一个值 val,你需要 原地 移除所有数值等于val的元素,
* 并返回移除后数组的新长度。
*


* 不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。
*


* 元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。
*/

//思路分析:
//1.题目要求原地移除,因此不能创建新数组,因为数组在创建后大小是不能改变的
// 一般意义上说的数组赋值其实是创建一个新数组,其长度等于旧数组
//2.因为数组创建后在内存中是连续存放的,因此可以稍微改变旧数组的值,然后将其又存储到新数组中
//3.此题目要求移出所有=val的元素,因此新数组的元素个数<=旧数组
//4.使用两个指针,左指针left代表新数组的索引,右指针right代表旧数组的索引
// 注意:旧数组的索引所在元素被修改后,旧数组也会被损坏,只会保存新数组

public int removeElement(int[] nums, int val) {

    //数组长度
    int len = nums.length;
    //定义左指针和右指针
    int right;
    int left = 0;
    //思路:1.因为移出后新数组的长度<=原数组,因此在不考虑用新数组和破坏原数组的情况下
    //2.可以将新数组继续存储在原数组中
    //3.即如果原数组中的值不等于val,则存储这个数
    //4.若原数组中值=val,则不存储这个数
    for (right = 0; right < len; right++) {
        //每次循环,右指针右移1
        //判断数组中的值和val的关系
        
        //如果每次遍历拿到的元素不等于val,则这个元素不删除
        if (nums[right] != val){
            //将这个元素重新存储,
            nums[left] = nums[right];
            left++;
            //即得到的新数组为nums[0 -- > left)
        }
    }
    return left;
}

}

标签:val,int,元素,数组,移除,LeetCode27,left
来源: https://www.cnblogs.com/mx-info/p/14716598.html