27. 移除元素

题目链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

 1.暴力解法:两个for循环

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

            }
        }
        return length;
    }

/**
     * 解释:两层for循环
     * nums = {3, 2, 2, 3}, val = 3
     * length = 4;
     * int i = 0; i < 4;
     *      int j = 0; j < 3;
     *      nums[0] == val; 则将nums[0]剔除掉, nums[0] = nums[1],nums[1]=nums[2],nums[2]=nums[3],
     *      nums = {2,2,3,3}
     *      由于所有元素的位置向前移动了一位,此时的nums[0]实际上是原nums数组的第二个元素,因此需要将索引i-1,i =0; 避免遗漏元素,
     *      由于最后一位元素3,已经是多余的元素,因此同时需要将length长度-1, length = 3
     *
     * int i = 0; i < 4
     *     nums[1] != val;
     *
     * int i = 1; i < 4
     *     nums[1] != val;
     *     
     * int i = 2; i<3
     *     nums[2]==val;
     *     j = 2 ; j < 3; 
     *     nums[2] = nums[3]
     *     nums = {2,2,3,3}
     *     由于所有元素的位置向前移动了一位,此时的nums[2]实际上是原nums数组的第4个元素,因此需要将索引i-1,i =1; 避免遗漏元素,
     *     由于倒数第二位元素3,已经是多余的元素,因此同时需要将length长度-1, length = 2
     *     
     * int i = 2; i <3
     *      nums[2] == val;
     *      j = 2 ; j < 1;
     *          退出循环
     *最后返回length 长度,由于length长度已经剔除了相等元素之后的长度,因此就是最终返回数组的长度
     *          */

 

public static int removeElement(int[] nums, int val) {
        int index = 0;
        for (int i = 0; i < nums.length; i++) {
            if (nums[i] != val){
                nums[index++] = nums[i];
            }
        }
        return index;
    }


 /**
     * nums = {3, 2, 2, 3}, val = 3
     * 解释:
     * index = 0
     * i = 0 , nums[0] == val, index = 0
     *
     * i = 1 , nums[1] != val,
     *         index = 0; nums[index++] = nums[1],
     *         此时数组是:nums = {2, 2, 2, 3}
     *         赋值之后 index = 1
     *
     * i = 2, nums[1] != val,
     *        index = 1; numx[index++] = nums[2],
     *        此时数组是:nums = {2, 2, 2, 3}
     *        赋值之后 index = 2
     *
     * i = 3, nums[3] == val,
     *        index = 2;
     *结束循环  返回index为2, 此时前两个元素已被赋值成与val不同的元素。
     * 
     * 相等就跳过,不相等就赋值.
*/

你可能感兴趣的:(LeetCode算法题,数据结构,算法)