LeetCode初級演算法之陣列 283 移動零

2022-09-18 07:21:25 字數 898 閱讀 8216

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

示例:

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

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

說明:

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

儘量減少操作次數。

題目資訊

輸入:陣列

輸出:陣列(將原陣列的0都移動到後面)

額外:空間o(1),時間儘量減少

思考對於這樣一道題一開始看到要原地修改首先就想到了雙指標遍歷一次把不是零的往前設定。後面的再全部設定0,這樣得到的演算法也是滿足空間複雜度o(1),時間複雜度o(n).

兩次迴圈執行時間0ms,這樣就已經算是完美解決了。但確實還可以只花一次迴圈就能解決,我們在遍歷過程當中是保證其他順序不變然後零到後面。上面的想法不就是掃瞄非0然後掃瞄乙個就往前面設定然後指標移動一。那麼同樣我們去確定零的位置然後交換始終保證數字在最左零的左邊即可

public

void

movezeroes

(int nums)}}

總結

總體來講兩種方式都是空間複雜度為o(1)的原地演算法,時間複雜度也都為o(n)後者略優一點

LeetCode初級演算法之陣列 存在重複

題目描述 給定乙個整數陣列,判斷是否存在重複元素。如果任何值在陣列 現至少兩次,函式返回 true。如果陣列中每個元素都不相同,則返回 false。示例 1 輸入 1,2,3,1 輸出 true 示例 2 輸入 1,2,3,4 輸出 false 示例 3 輸入 1,1,1,3,3,4,3,2,4,2...

LeetCode初級演算法之陣列 加一

題目描述 題目描述 給定乙個由整數組成的非空陣列所表示的非負整數,在該數的基礎上加一。最高位數字存放在陣列的首位,陣列中每個元素只儲存單個數字。你可以假設除了整數 0 之外,這個整數不會以零開頭。示例 1 輸入 1,2,3 輸出 1,2,4 解釋 輸入陣列表示數字 123。示例 2 輸入 4,3,2...

leetcode 初級演算法 陣列

給定乙個排序陣列,你需要在原地刪除重複出現的元素,使得每個元素只出現一次,返回移除後陣列的新長度。不要使用額外的陣列空間,你必須在原地修改輸入陣列並在使用 o 1 額外空間的條件下完成。示例 1 給定陣列 nums 1,1,2 函式應該返回新的長度2,並且原陣列 nums 的前兩個元素被修改為1,2...