leetcod刷題 移動零

2021-08-29 12:18:53 字數 1093 閱讀 1701

週末了,睡了好久的懶覺了,起來去實驗室寫專案之前再刷一道題提提神就好了。

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

示例:輸入: [0,1,0,3,12]

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

說明:

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

儘量減少操作次數。

這道題也是個簡單題,但是我發現我寫的**執行的時間和最快執行時間的程式差了好多

我的思路就是:

看下**也蠻簡單的

public

void

movezeroes

(int

nums)

int num =0;

for(

int i =

0;i < nums.length;i++)}

if(num ==0)

for(

int i =

0; i < num;i++)}

}}

我的**需要時間是最優解的45倍時間emmmmmm讓人頭大

題目做出來根本不是自己想要的結果,雖然答案對的,但是太耗費時間了,迴圈次數太多了

那麼我們應該如何去做呢

思路仔細分析一下,減少自己的迴圈次數,爭取一次迴圈就搞定

當我們迴圈的時候

遇到0的時候,記錄下0出現的次數t,t的初始值為0,遇到0加一

然後繼續遍歷陣列

遇到是0時候,t加一

非0的時候,nums[i-t] = nums[i];如果t大於0的話,nums[i] = 0;

總的來說,就是記錄0出現的個數,當第一次碰到0以後

後面的數字,就和0互動位置

如果0的個數是一的話,乙個挨著乙個換

如果0的個數是二的話,隔乙個換乙個位置

以此類推,,,

看下別人寫的**就是很舒服很舒服

這才是藝術

public

void

movezeroes1

(int

nums)

else

}}

leetcode刷題(17) 283 移動零

給定乙個陣列 nums,編寫乙個函式將所有 0 移動到陣列的末尾,同時保持非零元素的相對順序。示例 輸入 0,1,0,3,12 輸出 1,3,12,0,0 說明 必須在原陣列上操作,不能拷貝額外的陣列。儘量減少操作次數。建立乙個指標 j,用來記錄陣列中非零元素的個數。遍歷陣列,遇到非零元素就將其移動...

Leetcode刷題283 移動零

方法1 把陣列中j個非零元素存放在陣列的前j項,之後把後邊的元素設定為0即可,如下 class solution def movezeroes self,nums list int none do not return anything,modify nums in place instead.j ...

leetcode刷題打卡 283移動零

題目描述 給定乙個陣列 nums,編寫乙個函式將所有 0 移動到陣列的末尾,同時保持非零元素的相對順序。示例 輸入 0 1,0 3,12 輸出 1 3,12 0,0 說明 必須在原陣列上操作,不能拷貝額外的陣列。儘量減少操作次數。解題思路 定義兩個指標 a b,指標a一直在遍歷原陣列,指標a b一起...