虽然题目要求最大值一次只能修改一个,但是分析问题可以发现,有几个最大值,这个操作就需要操作几次。假设当前最大值有 a 个,次最大值有 b 个,则需要操作 a 次才能减少一个最大值。操作后,次最大值变成了最大值,个数是 a + b 个。所以,我们从大到小循环,每次消灭一个最大值,消灭到最后即可。
publicintreductionOperations(int[] nums){int result =0;//对数组进行排序Arrays.sort(nums);int len = nums.length;int count =0;int max = nums[len -1]+1;//从后往前遍历for(int i = len -1;i >=0; i--){if(nums[i]< max){
result += count;
max = nums[i];}//有几个最大值,这个操作就需要操作几次
count++;}return result;}