《力扣算法訓練提升》圖解數組篇-打卡數組統計-【283】移動零


《力扣算法訓練提升》圖解數組篇-打卡數組統計-【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,獲取已分類好的部分刷題順序,后續內容會持續更新,感興趣的小伙伴自由拿取!

另外,有關分類,求小伙伴們不要再問我最后一類的起名了,奇技淫巧是個褒義詞,意思是指新奇的技藝和作品。

力扣修煉體系題目,題目分類及推薦刷題順序及題解

目前暫定划分為四個階段:

算法低階入門篇--武者鍛體

算法中級進階篇--武皇煉心

算法高階強化篇--武帝粹魂

算法奇技淫巧篇--戰斗秘典

以上分類原諒我有個修仙夢...

缺漏內容,正在努力整理中...

guanzhuwo


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM