LeetCde_571、超级洗衣机

前言

这几天忙着活动的事,我懒惰了学习,但是我不能一致懒下去鸭,好吧,前两日的题我做不出来,昨天也看到了12点20左右,实在是我爱莫能助,所以没有更新,今日的打卡,他来了。首先感谢大佬提醒我继续Fighting打卡,来啦来啦。老规矩,打卡界面。

大佬留言截图

小提示一句:我是从去年3月份左右开始关注大佬的,大佬的python相关讲解真的超级好,神经网络,Cnn算法这一类数据分析都又自己独特的见解,大家要是感兴趣可以关注一波鸭!(不是打广告,就是单纯小小崇拜。哈哈哈)

大佬

![每日一题截图](https://img-blog.csdnimg.cn/3923a063794448b69fe767a8e82e260c.png#

原题题目

假设有 n 台超级洗衣机放在同一排上。开始的时候,每台洗衣机内可能有一定量的衣服,也可能是空的。
在每一步操作中,你可以选择任意 m (1 <= m <= n) 台洗衣机,与此同时将每台洗衣机的一件衣服送到相邻的一台洗衣机。
给定一个整数数组 machines 代表从左至右每台洗衣机中的衣物数量,请给出能让所有洗衣机中剩下的衣物的数量相等的最少的操作步数 。如果不能使每台洗衣机中衣物的数量相等,则返回 -1 。

原题案例

![案例截图](https://img-blog.csdnimg.cn/599ad6f78b9d4be683b4943333e53e1c.png#

题目分析

在今天看到大佬的留言第一时间我就看了看了一眼我的LeetCode题,看了一眼,今天的超级洗衣机,感觉大致一看,可以搞,就赶紧回复了,现在他来啦。我对于这道题的思路是这样的,既然,题目说了,不能平均分就返回-1,那就先来一个衣服总数对洗衣机总数取余,不等于0,就是不能平均分配了鸭。在看之后的衣服怎么分,我的思路是这样的,就是我们从第一个开始拿,假如说他小于平均数,我们就从第二个洗衣机给他拿,第二个洗衣机也比他少,也从第三个洗衣机给他拿,第三个洗衣机拿完还有多的,就把多的拿出来,拿给第四个洗衣机。给大家举个例子叭,假如说我有4个洗衣机,分别装有[1,2,11,2]件衣服,总数16件,他们平均值为4件,那么他们每个洗衣机里面需要拿出的衣服就是[-3,-2,7,-2],那么我们就是第一个洗衣机差3件,从第二个洗衣机里拿,此时的结果就变成了,耗费了3次,[0,-5,7,-2],此时的2号洗衣机需要5件衣服,我们就从三号洗衣机拿,耗费了5次,此时结构就变成了[0,0,2,-2],最后到3号洗衣机里面有两件,正好给4号洗衣机了,再增加2次,最后结果就变成了3+5+2=10次。可能有的同学们不能理解的是,我二号洗衣机都没有那么多衣服,我怎么拿的呢,请注意题目中有一个叫做任意洗衣机取值,我们就假设知道该怎么放,就是不做重复的事。就是一种理想中的拿法。这就是我们的最优解。

代码实现

    public int findMinMoves(int[] machines) {
        //首先我们又必须要长度相等,所以可以先计算所有的和
        int all = 0;
        for(int i : machines){
            all+=i;
        }
        int n = machines.length;
        if(all% n!=0){
            return -1;
        }
        int avg = all/n;
        int sum=0,abs=0;
        for (int i : machines) {
        	//统计需要的次数
            sum+= i-avg;
            //sum可能是负数,加一个abs,就让它取绝对值,
            //对于它于i-avg取最大值就是我们有可能这一次的衣服并不是刚好都是从旁边拿的,
            //因为旁边可能没有,就需要从更远的地方运过来,
            //最后abs在进行一下比较的主要目的是为了更新数据,
            //也是为了防止数据减少
            abs = Math.max(abs,Math.max(Math.abs(sum),i-avg));
        }
        return abs;
    }

leetCode运行截图
![运行截图](https://img-blog.csdnimg.cn/6dc1e015dcb3444e8252afe7a8efb0ce.pn


番外:
今天对我而言,还算是比较高兴的一天,我珍藏许久的MarkDown编辑器的使用方法纵欲分享出去了,今天的活动我个人觉得自己表现也还不错,最重要的时,哈哈哈,大佬给我评论留言啦 。冲冲冲!持续更新。

ps:每日一句毒鸡汤:累死你的不是工作,而是工作中遇到的人!

评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值