一道题,最小操作次数使数组元素相等引发的思考
前言
最近在打卡力扣刷題,一道簡單題但是感覺挺好的。
力扣453:最小操作數使數組相等。
題目描述為:
給你一個長度為 n 的整數數組,每次操作將會使 n - 1 個元素增加 1 。返回讓數組所有元素相等的最小操作次數。
示例 1:
輸入:nums = [1,2,3]
輸出:3
解釋:
只需要3次操作(注意每次操作會增加兩個元素的值):
[1,2,3] => [2,3,3] => [3,4,3] => [4,4,4]
示例 2:
輸入:nums = [1,1,1]
輸出:0
提示:
n == nums.length
1 <= nums.length <= 105
-109 <= nums[i] <= 109
答案保證符合 32-bit 整數
分析
拿到這題,題目告訴我們所有數字都只能增加,這里要求的是次數,每一次的效果是其他都增加1,其實也是其他相對不變自己減1,讓所有數字相等,就是讓所有數字都減到數組中的最小次數就行啦。
但是實現的時候可以先設一個比最小還小的數字(先計算到這么小數字的次數),然后順序統計的途中標記最小的,最后再拿總次數減去這個次數就可以了。
實現代碼
class Solution {public int minMoves(int[] nums) {if(nums.length==0)return 0;int min=nums[0];long va=0;int MIN=Integer.MIN_VALUE;for(int i=0;i<nums.length;i++){va+=nums[i]-MIN;if(nums[i]<min)min=nums[i];}va-=(long) (min-MIN)*nums.length;return (int)va;} }結語
這個題的做法技巧是 換位思考,別人都增加,其實你就是減少,我們要將復雜的加法問題轉換成簡單的減法問題。
還有好像也在暗示著什么,別人都在進步的時候,你原地不動就是在退步,你也很難超凡比別人強太多,想要不落下,就是要一步一個腳印,刷題打卡!
這是第三次組織csdn小伙伴一起力扣每日一題打卡,有需要的可以通過下面公號👇🏻👇🏻👇🏻關注加我,然后我拉你進每日一題力扣打卡一起學習交流!
總結
以上是生活随笔為你收集整理的一道题,最小操作次数使数组元素相等引发的思考的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一棵树,怎么就平衡了(图解AVL+实现)
- 下一篇: 1024,给大家谈谈如何搞透刷题 玩转力