週末了,睡了好久的懶覺了,起來去實驗室寫專案之前再刷一道題提提神就好了。
給定乙個陣列 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一起...