《力扣算法訓練提升》圖解數組篇-打卡數組統計-【435】最小移動次數使數組元素相等


《力扣算法訓練提升》圖解數組篇-打卡數組統計-【435】最小移動次數使數組元素相等

打卡

數組的基本特性

數組是最簡單的數據結構。

數組是用來存儲一系列相同類型數據,數據連續存儲,一次性分配內存。

數組中間進行插入和刪除,每次必須搬移后面的所有數據以保持連續,時間復雜度 O(N)。

囧么肥事今日打卡題目

力扣【435.最小移動次數使數組元素相等】

給定一個長度為 n非空 整數數組,每次操作將會使 n - 1 個元素增加 1。找出讓數組所有元素相等的最小操作次數。

具體描述

算法描述

解題討論

討論點擊並拖拽以移動

跨步計算示例

跨步計算

討論歸納

第一步:排序
第二步:遍歷數組,計算跨步,即最大值和最小值差值
第三步:累加跨步

歸納

動畫模擬

動畫模擬

示例一:跨步計算

// 排序后計算跨步,最大值到最小值跨步累加就是操作次數
public static int minMoves(int[] nums) {
    // 4 1 9 3

    //  1  3  4  9      排序后
    //  9 11 12  9      跨步:8
    // 12 14 12 12      跨步:3
    // 14 14 14 14      跨步:2

    Arrays.sort(nums);
    int count = 0;
    int min = nums[0];
    int step = 0;
    for (int i = nums.length - 1; i > 0; i--) {
        // 計算跨步 = 最大最小差值
        step = nums[i] - min;
        // 累加跨步
        count += step;
        // 更新 nums[i - 1]
        nums[i - 1] = nums[i - 1] + count;
        // 更新最小數
        min += step;
    }
    return count;
}

復雜度分析

時間復雜度:O(nlog(n))。 排序需要 O(nlog(n)) 的時間。
空間復雜度:O(1)。需要常量級額外空間。

示例二:計算相對跨步

// 省略數組元素修改
// 計算相對跨步
public static int minMoves(int[] nums) {
    Arrays.sort(nums);
    int count = 0;
    for (int i = nums.length - 1; i > 0; i--) {
        count += nums[i] - nums[0];
    }
    return count;
}

復雜度分析

時間復雜度:O(nlog(n))。 排序需要 O(nlog(n)) 的時間。
空間復雜度:O(1)。需要常量級額外空間。

勇敢牛牛

短話長說

學算法先學什么?什么階段該刷什么題?

關注我,日常打卡算法圖解。

按照力扣題目類別結構化排序刷題,從低階到高階,圖解算法(更新中…),有興趣的童鞋,歡迎一起從小白開始零基礎刷力扣,共同進步!

短話長說

回復:678,獲取已分類好的部分刷題順序,后續內容會持續更新,感興趣的小伙伴自由拿取!

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

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

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

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

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

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

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

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

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

關注我


免責聲明!

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



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