《力扣算法訓練提升》圖解數組篇-打卡數組統計-【283】移動零
囧么肥事今日打卡題目
力扣【283.移動零】
給定一個數組 nums
,編寫一個函數將所有 0
移動到數組的末尾,同時保持非零元素的相對順序。
具體描述
解題討論
討論歸納
假設不考慮題目空間要求,利用輔助數組
遍歷原數組,將非 0 數 填充進輔助數組
遍歷完畢后,余位補 0
動畫模擬
思考:題目要求不能使用額外數組
不能使用額外數組,操作原數組,雙指針交換數組元素。
聲明兩個指針L,R
L指向 0 位,R指向非 0 位
遍歷數組
滿足 a[R] > 0 , 則交換 a[L] , a[R], L++, R++
否則 a[R] <= 0, R++
動畫模擬
示例:雙指針
//輸入: [0,1,0,3,12]
//輸出: [1,3,12,0,0]
// 雙指針
// 0 1 0 3 12 L=0, R=0 初始化
// 0 1 0 3 12 L=0, R=1 交換 arr[0], arr[1]
// 1 0 0 3 12 L=1, R=3 交換 arr[1], arr[2]
// 1 3 0 0 12 L=2, R=4 交換 arr[2], arr[4]
// 1 3 12 0 0
public static void moveZeroes(int[] nums) {
int L = 0;
int R = 0;
while (R < nums.length) {
if (nums[R] != 0) {
swap(nums, L++, R);
}
R++;
}
}
// 交換L,R下標對應數據
public static void swap(int[] arr, int L, int R) {
int tmp = arr[L];
arr[L] = arr[R];
arr[R] = tmp;
}
復雜度分析
時間復雜度:O(n)。 遍歷數組,需要O(n)時間。
空間復雜度:O(1)。需要常量級額外空間。
短話長說
學算法先學什么?什么階段該刷什么題?
關注我,日常打卡算法圖解。
按照力扣題目類別結構化排序刷題,從低階到高階,圖解算法(更新中...),有興趣的童鞋,歡迎一起從小白開始零基礎刷力扣,共同進步!
回復:678,獲取已分類好的部分刷題順序,后續內容會持續更新,感興趣的小伙伴自由拿取!
另外,有關分類,求小伙伴們不要再問我最后一類的起名了,奇技淫巧是個褒義詞,意思是指新奇的技藝和作品。
力扣修煉體系題目,題目分類及推薦刷題順序及題解
目前暫定划分為四個階段:
算法低階入門篇--武者鍛體
算法中級進階篇--武皇煉心
算法高階強化篇--武帝粹魂
算法奇技淫巧篇--戰斗秘典
以上分類原諒我有個修仙夢...
缺漏內容,正在努力整理中...