LeetCode-453最小操作次数使数组元素相等

题目分析:在题目中要求每次将数组中的n-1个元素增加1,直到每个元素相等,返回最小的操作次数。这里很明显每次操作中不变的肯定是最大的那一个数,所以我们首先要想明白我们要如何将最大数找出,然后对每个其它的元素进行增加,循环上面的操作,直到所有的元素相等,但是如果用上面这种思路的话不仅代码量较大,且代码的运行效率较低,在LeetCode中肯定也会因为运行超时提交失败,所以下面的核心思想会介绍一种简便的方法。

核心思想:我们可以从另一种角度进行思考本题,每次操作都会对除了最大元素以外的元素进行加一,这对于总体来说就相当于将最大元素减一,这样的话每次操作中就只需要对一个元素进行操作,就不需要对其它元素进行操作,并且将其它元素增大的话我们还需要考虑最大值不止一个,这样的话每次操作中都需要重新寻找最大值,但是我们如果只需要找到最小值的话我们就只需要计算其它值减小到最小值需要的操作步骤就行了,不需要每次都对最小值进行寻找,这样的话大大的提高了代码的运行效率。下面是代码的书写步骤

首先我们需要将最小值找出,将最小值找出的话我们可以采用for循环遍历一遍数组将最小值找出就行

int min=nums[0];
for(int i=1;i<nums.length;i++)
{
    if(nums[i]<min)
    {
        min=nums[i];
    }
}

我们也可以使用另一种方法就是使用Arrays.sort()方法对数组进行排序,数组的第一个元素就是最小值,这样会简化书写过程,在LeetCode中的很多其它题目使用这个方法可以提高代码的运行效率,这里使用任何一种方法就行

Arrays.sort(nums);//排序

在计算操作数的时候我们只需要计算所有大于最小元素的元素与最小元素的差值的和就行了,这里就使用for循环就可以计算得出了

for(int i=1;i<nums.length;i++)
count+=nums[i]-nums[0];

这里我采用的是使用Arrays.sort()方法最数组排序找到的最小值,所以数组第一个数就是最小值。

这里因为其它数是大于等于nums[0]的,所以nums[i]-nums[0]大于等于0,所以这里就不需要进行

nums[i]>nums[0]的判断了。

下面是整体代码:

class Solution 
{
    public int minMoves(int[] nums)
    {
    /*每次除了最大值其他的值都需要加一,最大值与其他最小值的差减小1,所以相当于最大值减小一
    所以需要计算所有值减小到最小值的次数*/
            int count=0;
            Arrays.sort(nums);//排序
            if(nums[nums.length-1]!=nums[0])
            {
                for(int i=1;i<nums.length;i++)
                count+=nums[i]-nums[0];
            }
            //首位相等则代表数组原本就相等,所以直接返回count;
            return count;
    }
}

在这里我是使用的Arrays.sort对数组进行排序来找到的最小值,所以这里我考虑了一种特殊情况就是所有元素相等,操作数为0的情况,这样的话我们只需要对数组第一个元素和最后一个元素进行对比,相等的话就是所有元素相等,直接返回0就可以了,不相等的话在进行下面的计算操作。

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
LeetCode-Editor是一种在线编码工具,它提供了一个用户友好的界面编写和运行代码。在使用LeetCode-Editor时,有时候会出现乱码的问题。 乱码的原因可能是由于编码格式不兼容或者编码错误导致的。在这种情况下,我们可以尝试以下几种解决方法: 1. 检查文件编码格式:首先,我们可以检查所编辑的文件的编码格式。通常来说,常用的编码格式有UTF-8和ASCII等。我们可以将编码格式更改为正确的格式。在LeetCode-Editor中,可以通过界面设置或编辑器设置来更改编码格式。 2. 使用正确的字符集:如果乱码是由于使用了不同的字符集导致的,我们可以尝试更改使用正确的字符集。常见的字符集如Unicode或者UTF-8等。在LeetCode-Editor中,可以在编辑器中选择正确的字符集。 3. 使用合适的编辑器:有时候,乱码问题可能与LeetCode-Editor自身相关。我们可以尝试使用其他编码工具,如Text Editor、Sublime Text或者IDE,看是否能够解决乱码问题。 4. 查找特殊字符:如果乱码问题只出现在某些特殊字符上,我们可以尝试找到并替换这些字符。通过仔细检查代码,我们可以找到导致乱码的特定字符,并进行修正或替换。 总之,解决LeetCode-Editor乱码问题的方法有很多。根据具体情况,我们可以尝试更改文件编码格式、使用正确的字符集、更换编辑器或者查找并替换特殊字符等方法来解决这个问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值