LeetCode283 移動零
阿新 • • 發佈:2021-06-16
題目
給定一個數組 nums,編寫一個函式將所有 0 移動到陣列的末尾,同時保持非零元素的相對順序。
示例:
輸入: [0,1,0,3,12]
輸出: [1,3,12,0,0]
說明:
必須在原陣列上操作,不能拷貝額外的陣列。
儘量減少操作次數。
方法
雙指標法
從頭分別找到第一個0和之後第一個非0的數進行交換,然後依次往下找0和非0數交換,即把陣列看出非零陣列和零陣列,從頭依次交換直至所有的零都在後面
- 時間複雜度:O(n)
- 空間複雜度:O(1)
class Solution { public void moveZeroes(int[] nums) { int str0 = 0; //為0的指標 int str1 = 0;//不為零的指標 while (str1<nums.length){ while (str0<nums.length&&nums[str0]!=0){ str0++; } str1 = str0; while (str1<nums.length&&nums[str1]==0){ str1++; } if(str1<nums.length){ int tmp = nums[str0]; nums[str0] = nums[str1]; nums[str1] = tmp; } } } }