LeetCode移动零
LeetCode移動零
給定一個數(shù)組 nums ,編寫一個函數(shù)將所有 0 移動到數(shù)組的末尾 ,同時保持非零元素的相對順序。
說明:
- 必須在原數(shù)組上操作,不能拷貝額外的數(shù)組。
- 盡量減少操作次數(shù)。
void moveZeroes(int* nums, int numsSize){ int count = 0, length = numsSize-1; while (length >= 0) { if(nums[length] == 0) { count++;//計數(shù) int temp = length; while (temp < numsSize-1) { nums[temp] = nums[temp+1]; temp++; } } length--; } while (count >0) { nums[numsSize-count] = 0; count--; }}官方答案 :雙指針法
思路及解法
使用雙指針,左指針指向當前已經(jīng)處理好的序列的尾部 ,右指針指向待處理序列的頭部。
右指針不斷向右移動,每次右指針指向非零數(shù) ,則將左右指針對應的數(shù)交換,同時左指針右移 。
注意到以下性質(zhì) :
左指針左邊均為非零數(shù);
右指針左邊直到左指針處均為零。
因此每次交換 ,都是將左指針的零與右指針的非零數(shù)交換 ,且非零數(shù)的相對順序并未改變 。
void swap(int *a, int *b) { int t = *a; *a = *b, *b = t;}void moveZeroes(int *nums, int numsSize) { int left = 0, right = 0; while (right < numsSize) { if (nums[right]) { swap(nums + left, nums + right); left++; } right++; }}展開閱讀全文投稿時間:2022-01-24 最后更新:2022-09-09
.jpg)
標簽:氣流干燥設備