LeetCode-Java题解 27. Remove Element

题目地址:27. Remove Element
方法一:
解题思路:这个题目第一反应的就是双重循环暴力破解。虽然很不优雅,但是的确是个快狠准的方法。
需要注意的是,由于向前移动元素,并没有“真正”的删除元素,数组长度是不会变化的,所以需要额外申请一个length来记录数组长度。把握好数组长度这个边界条件的话,用暴力破解是没有任何难度的。

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

 
方法二:
解题思路:还有另外一种更优雅的方法就是“双指针”法,在无法新申请数组空间的情况下,将整个数组认为的划分为两个区域,第一个区域就是待检索区域,第二个区域就是废弃区域(把删除的元素放置于此,把没检测的元素交换至待检索区域),这样就避免了双重循环,使得时间复杂度从O(n2)降低至O(n),从而达到简化的效果。

class Solution {
    public int removeElement(int[] nums, int val) {
        if(nums.length<=0){
            return 0;
        }
        int length = nums.length-1;
        int temp;
        for (int i = 0; i <= length; i++) {
            if (val == nums[i]) {
             temp=nums[i];
             nums[i]=nums[length];
             nums[length]=temp;
             length--;
             i--;
            }
        }
        return length+1;
    }
}
posted @ 2022-01-26 12:42  古宇  阅读(33)  评论(1编辑  收藏  举报

欢迎来刀