1. 程式人生 > >【演算法】刪除一個數組中為0的元素

【演算法】刪除一個數組中為0的元素

題目描述:

給定一個一維陣列,將其中為0的元素刪除掉,非零元素的相對位置保持不變,最終目標陣列保留在原陣列中,並且目標陣列長度之外的元素全部置為0。

解題思路:

(1)陣列非零元素往前移動,時間複雜度O(n)。

思路:先將非0的元素往前靠,最後再將剩下的位置重置為0。

實現程式碼:

public void moveZeroes(int[] nums) {
        if(nums.length < 1)
            return ;
        int Index = 0;
        for (int i=0; i<nums.length; i++){
            if(0 != nums[i]){
                nums[Index++] = nums[i];
            }
        }
        for(int i=Index; i<nums.length; i++){
            nums[i] = 0;
        }

    }

 (2)利用兩個指標,交換位置。時間複雜度O(n)。

思路:可以用兩個指標,第一個指標永遠指向從左往右為0的元素,第二個指標為遍歷指標,當遍歷指標指向的值為非0的時候,將這個元素與第一個指標指向的元素交換。

public void moveZeroes(int[] nums) {
        //first指標永遠指向當前為0的元素
        int first = 0;

        for (int second = 0; second < nums.length; second++) {
            //為0的和非0的交換
            if (nums[second] != 0) {
                int temp = nums[first];
                nums[first] = nums[second];
                nums[second] = temp;
                first++;
            }
        }
    }

Reference: