首页 > 其他分享 >1887. 使数组元素相等的减少操作次数

1887. 使数组元素相等的减少操作次数

时间:2023-05-12 15:55:35浏览次数:51  
标签:下标 数组 nums 元素 次数 nextLargest largest 1887 减少

1887. 使数组元素相等的减少操作次数

给你一个整数数组 nums ,你的目标是令 nums 中的所有元素相等。完成一次减少操作需要遵照下面的几个步骤:

  1. 找出 nums 中的 最大 值。记这个值为 largest 并取其下标 i下标从 0 开始计数)。如果有多个元素都是最大值,则取最小的 i
  2. 找出 nums 中的 下一个最大 值,这个值 严格小于 largest ,记为 nextLargest
  3. nums[i] 减少到 nextLargest

返回使nums中的所有元素相等的操作次数。

示例 1:

输入:nums = [5,1,3]
输出:3
解释:需要 3 次操作使 nums 中的所有元素相等:
1. largest = 5 下标为 0 。nextLargest = 3 。将 nums[0] 减少到 3 。nums = [3,1,3] 。
2. largest = 3 下标为 0 。nextLargest = 1 。将 nums[0] 减少到 1 。nums = [1,1,3] 。
3. largest = 3 下标为 2 。nextLargest = 1 。将 nums[2] 减少到 1 。nums = [1,1,1] 。

示例 2:

输入:nums = [1,1,1]
输出:0
解释:nums 中的所有元素已经是相等的。

示例 3:

输入:nums = [1,1,2,2,3]
输出:4
解释:需要 4 次操作使 nums 中的所有元素相等:
1. largest = 3 下标为 4 。nextLargest = 2 。将 nums[4] 减少到 2 。nums = [1,1,2,2,2] 。
2. largest = 2 下标为 2 。nextLargest = 1 。将 nums[2] 减少到 1 。nums = [1,1,1,2,2] 。 
3. largest = 2 下标为 3 。nextLargest = 1 。将 nums[3] 减少到 1 。nums = [1,1,1,1,2] 。 
4. largest = 2 下标为 4 。nextLargest = 1 。将 nums[4] 减少到 1 。nums = [1,1,1,1,1] 。

提示:

  • 1 <= nums.length <= 5 * 104
  • 1 <= nums[i] <= 5 * 104
class Solution {
    public int reductionOperations(int[] nums) {
        int cnt = 0;
        //  排序
        Arrays.sort(nums);
        int mut = 0;
        for (int i = 1;i < nums.length;++i) {
            //  每大一次,需要改变的次数加一
            if (nums[i] != nums[i-1]) {
                mut++;
            }
            cnt+=mut;
        }
        return cnt;
    }
}

 

标签:下标,数组,nums,元素,次数,nextLargest,largest,1887,减少
From: https://www.cnblogs.com/fulaien/p/17394401.html

相关文章

  • 在C#中使用默认值初始化字符串数组的3种方式
    在本文中,您将学习到新建字符串数组如何设置默认值。数组是可以使用索引访问的相同类型的元素的集合。对于字符串数组,每个元素都是一个字符串值。在C#中创建新的字符串数组时,默认值为null。但是,在某些情况下,您可能希望使用特定的默认值而不是null初始化字符串数组。例如,希望A......
  • opencv高维数组-4维
    转载:https://blog.csdn.net/weixin_41767419/article/details/116204595创建高维数组#include<opencv2/opencv.hpp>#include<iostream>usingnamespacecv;usingnamespacestd;intmain(){intp=1;intq=2;intt=3;intu=4;......
  • 找出数组的最大公约数
    给你一个整数数组nums,返回数组中最大数和最小数的最大公约数。两个数的 最大公约数是能够被两个数整除的最大正整数。示例1:输入:nums=[2,5,6,9,10]输出:2解释:nums中最小的数是2nums中最大的数是102和10的最大公约数是2示例2:输入:nums=[7,5,6,8,3]输......
  • java代码中fastjson生成字符串和解析字符串的方法和javascript文件中字符串和json数组
    1.java代码中fastjson生成字符串和解析字符串的方法List<TemplateFull>templateFulls=newArrayList<TemplateFull>();JSONArrayjsonArr=newJSONArray();jsonArr.addAll(templateFulls);StringjsonStr=jsonArr.toJSONString();System.out.pr......
  • 1.删除排序数组中的重复项
    0.题目描述给你一个升序排列的数组nums,请你原地删除重复出现的元素,使每个元素只出现一次,返回删除后数组的新长度。元素的相对顺序应该保持一致。然后返回nums中唯一元素的个数。考虑nums的唯一元素的数量为k,你需要做以下事情确保你的题解可以被通过:更改数组......
  • 删除数组A中与数组B的公共元素
    varA=[1,2,3,4,5,6,7];varB=[2,7]for(varn=0;n<B.length;n++){for(varm=0;m<A.length;m++){if(A[m]==B[n]){A.splice(m,1);m=m-1;}}}输出结果是:[1,3,4,5,6]关注我的公众号SpaceObj领取idea系列激活码......
  • java8 数组使用流和收集器格式化拼接数组中字符串并以“,”间隔,且首尾分别用 “[” 和
    方法:Stringresult=artist.stream().map(Art::getName).collect(Collectors.joining(",","[","]"));(注:joining(CharSequencedelimiter,CharSequenceprefix,CharSequencesuffix)方法接受一个字符串序列作为拼接符,并在拼接完成后添加传递的前缀和后缀。假如我们传递的分......
  • Java数组
    含义:数组是存储同一种数据类型多个元素的容器。数组既可以存储基本数据类型,也可以存储引用数据类型,分为一维数组和二维数组。一维数组:定义格式:格式 1 :数据类型 [] 数组名 ; (推荐的方式)格式 2 :数据类型 数组名 [];初始化:Java 中的数组必须先初始化 , 然后才能使用......
  • 两个数组间的距离值
    给你两个整数数组 arr1 , arr2 和一个整数 d ,请你返回两个数组之间的 距离值 。「距离值」 定义为符合此距离要求的元素数目:对于元素 arr1[i] ,不存在任何元素 arr2[j] 满足|arr1[i]-arr2[j]|<=d。示例1:输入:arr1=[4,5,8],arr2=[10,9,1,8],d=2输出:2......
  • php数组和网址URL参数的互相转换
    前言接口调试和开发的过程中,相信很多小伙伴都会经常用到数组和url参数的相互转换来模拟请求。其实不用自己再通过foreach或implode之类的手动实现,php自身的函数库给我们提供了两个方法,完全够用:一、http_build_query将数据转换为URL参数格式,返回一个URL编码后的字符串。......