給乙個陣列 nums 寫乙個函式將 0 移動到陣列的最後面,非零元素保持原陣列的順序
1.必須在原陣列上操作
2.最小化運算元
例1:
輸入: nums = [0, 1, 0, 3, 12],
輸出: [1, 3, 12, 0, 0].
例2:
輸入: nums = [0, 0, 0, 3, 1],
輸出: [3, 1, 0, 0, 0].
演算法:雙指標
演算法思路
**思路
將兩個指標先指向0,即陣列頭部
right向後掃瞄,當遇到非0數即nums[right] != 0時,將其賦值給新陣列指標指向的位置,即nums[left] = nums[right],並將left向後移動一位
若新陣列指標還未指向尾部,即剩餘的位置都是0,將剩餘陣列賦值為0
複雜度分析
n表示陣列nums長度
public
class
solution
right
++;}
// 若新陣列指標還未指向尾部,將剩餘陣列賦值為0
while
(left
<
nums
.length)}
}
更多題解參考:九章演算法
九章演算法 Google面試題 內積
描述 給定長度為n的a陣列,長度為k的b陣列 你可以從a陣列裡取k個數 規則如下 即每次可以從a陣列的最左邊或者最右邊取走乙個數,取走的數從陣列中移除 將取出的ai按取出的順序組成c陣列 求b與c的內積最大值 b與c內積為 i 0k 1bi ci 解釋1 a 1,4,3,2,5 b 1,2,3,4 ...
九章演算法面試題32 小球排序
有紅黃藍三色的小球若干排成一列,這些小球進行排序,請使用盡量少的空間和時間。假設順序為紅色黃色藍色。用兩根指標從頭開始遍歷,第一根指標遇到非紅色時停下,如果第二根指標找到第一根指標之後的第乙個紅色停下,交換兩根指標所指顏色。重複上述過程。直到第二根指標找不到任何紅色。此時第一根指標到最後都是黃色或藍...
九章演算法面試題33 陣列波峰
乙個陣列a 1.n 假設陣列中沒有任何相鄰兩數相等,滿足a 1 n。a i 被稱為波峰,當且僅當a i a i 1 並且a i a i 1 請找到陣列中的乙個波峰。假設陣列中存在相鄰相等的數,該怎麼做?根據條件a 1 a n 可知a中一定存在波峰。用二分法,選擇中點mid,如果a mid 是波峰,則...