一、今日刷题
一、今日刷题
第一部分:数组 – 第453题
跳转LeetCode
给你一个长度为 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-1n−1 个元素增加 11,也可以理解使 11 个元素减少 11。显然,后者更利于我们的计算。
于是,要计算让数组中所有元素相等的 *** 作数,我们只需要计算将数组中所有元素都减少到数组中元素最小值所需的 *** 作数
import java.util.Arrays; public class MinMoves { public static void main(String[] args) { int[] nums = {1,2,3}; int result = minMoves(nums); System.out.println(result); } public static int minMoves(int[] nums) { int minNumber = Arrays.stream(nums).min().getAsInt(); int res = 0; for (int num : nums) { res += num - minNumber; } return res; } }
这个题标的是简单题,但第一次做,思路上完全没有想法。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)