1. 程式人生 > >乘風破浪:LeetCode真題_027_Remove Element

乘風破浪:LeetCode真題_027_Remove Element

乘風破浪:LeetCode真題_027_Remove Element

一、前言

     這次是從陣列中找到一個元素,然後移除該元素的所有結果,並且返回長度。

二、Remove Element

2.1 問題

2.2 分析與解決

    這個題和上一題是非常相似的,只不過這次是從陣列中找到給定的元素,並且刪除該元素,同時返回剩餘陣列的長度,超過長度的元素不用管,存不存在都可以。於是我們想到了和上次一樣的方法,用一個指標指向開始,一個指向結尾,開始的向後移動,如果遇到需要刪除的元素,則用最後的元素替代,最後的指標向前移動,然後再次從修改的位置開始往後遍歷,這樣等到兩個指標重合,我們就得到了想要的結果。

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

三、總結

    小的問題,細節上也很重要,比如空的陣列等等,考慮問題的時候一定要全面,測試用例要多一點。