將數組的0元素都移動到最後

給定一個整數的數組,要求將數組中的所有的0元素移動到數組的最後,其他的元素保持原來的順序。

要求:空間複雜度不能超過O(1)

example:

給定數組[0,2,0,7]轉換後應爲[2,7,0,0]

輸入:

第一行輸入一個數位數組的長度

其他的數爲數組中元素。

分析:該題目的難點在於將非0的元素移動到數組的前端的時候必須要保持數組原來元素的順序。我們可以看出0元素是確定的元素,我們可以統計0元素的個數之後,我們其他的元素向前移動的時候就可以將0覆蓋。

下面是詳細的實現:

public class MoveZeroElement {
    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        int n = s.nextInt();
        int[] nums = new int[n];
        for (int i = 0; i < n; i++) {
            nums[i] = s.nextInt();
        }
        getResult(nums);
    }

    private static void getResult(int[] nums) {
        if (nums == null || nums.length == 0)
            return;
        int count = 0;
        for (int n : nums)
            if (n == 0) count++;
        int zeroIndex = nums.length-count;
        for (int i = 0; i < zeroIndex; i++) {
            if (nums[i] == 0){
                int j = i+1;
                while (nums[j] == 0)
                    j++;
                nums[i] = nums[j];
                nums[j] = 0;
            }
        }
        for (int i = zeroIndex; i < nums.length; i++) {
            nums[i] = 0;
        }
        System.out.println(Arrays.toString(nums));
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章