1. 程式人生 > 其它 >LeetCode-283-移動零(完整程式碼C語言)

LeetCode-283-移動零(完整程式碼C語言)

技術標籤:陣列LeetCode刷題筆記c語言leetcode演算法

LeetCode-283-移動零(完整程式碼C語言)

題目

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

來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/surface-area-of-3d-shapes
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。

示例及提示

示例:

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

必須在原陣列上操作,不能拷貝額外的陣列。

儘量減少操作次數。

來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/surface-area-of-3d-shapes
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。

程式碼(C語言)

#include<stdio.h>

int moveZeroes(int* nums, int numsSize){
	int label=0;
	for(int j=1;j<numsSize;j++){
		if(nums[label]==0&&nums[j]!=0){
			nums[label]=nums[
j]; nums[j]=0; label++; } if(nums[label]!=0){ label++; } } } int main(){ int nums[]={0,0,1,0,3,1,2}; int numsSize=sizeof(nums)/sizeof(nums[0]); moveZeroes(nums,numsSize); for(int i=0;i<numsSize;i++){ printf("%d ",nums[i]); } }

本題用雙指標簡單快捷的就能解決。即兩個指標分別指向尚未排序處理的第一個元素和將要處理的元素。

解讀

按照這個雙指標的方案解決主要要考慮清楚陣列第一個元素該怎麼處理。