leetcode 283移動 0 java

給定一個數組 nums,編寫一個函數將所有 0 移動到數組的末尾,同時保持非零元素的相對順序。

示例:

輸入: [0,1,0,3,12]
輸出: [1,3,12,0,0]

說明:

  1. 必須在原數組上操作,不能拷貝額外的數組。
  2. 儘量減少操作次數。

解題思路:

使用雙指針法,一個指針 vInd 指向非零值,一個指針zInd指向零,當vInd<=zInd不做交換,且向後移動vInd指針直到大於zInd,如果符合交換條件即可交換兩個位置上的值,這一步可以直接將 vInd位置的值賦給zInd的位置上, 然後vInd位置上直接賦值0,,其他的就是判斷條件是否滿足vInde 和 zInd所指向的值,不滿足則移動指針至滿足。

時間上擊敗 96.06% 人 1ms
空間上擊敗 40-63% 左右 42MB ~ 40.3MB

代碼

class Solution {
    public void moveZeroes(int[] nums) {
       int zIn = 0;
        int vIn = 0;
        int i = 0;
		if(nums.length == 1){
			return;
		}
        while(vIn<nums.length&&zIn<nums.length){
            if(nums[zIn]==0&&nums[vIn]!=0&&zIn<vIn){
                nums[zIn] = nums[vIn];
				nums[vIn] = 0;
                zIn++;
				vIn++;
            }
			while(zIn<nums.length&&nums[zIn]!=0){
                zIn++;
            }
            while(vIn<nums.length&&nums[vIn] == 0){
                vIn++;
            }
			while(vIn<=zIn){
				vIn++;
			}
        }  
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章