zoukankan      html  css  js  c++  java
  • LeetCode 517 超级洗衣机(贪心)

    这道题给出了初始每个洗衣机内的衣服,每一次操作可将任意个洗衣机内的一件衣服移到相邻的一台洗衣机内,问每台洗衣机内的衣服经过多次操作后是否可以相等,如果可以,那么最少操作步骤是多少。这道题用的方法很巧妙,时间复杂度只需要O(n),具体方法是首先计算出是否可以给每台洗衣机分配相等的衣服,如果可以就继续计算出每台洗衣机最终的衣服数量P,然后用当前数组减去P得出每台洗衣机需要的衣服或者多余的衣服,并且统计出多余衣服的最大值ans1(这里只统计多余的是因为一个洗衣机每次最多只能给出一件衣服,但是最多可以接收两件衣服,所以接收衣服的次数无法准确得出)。然后从第一个洗衣机开始计算当前需要还是多余的衣服数,然后计算第二个,因为这里无论第一个洗衣机多余衣服还是需要衣服都需要经过第二个洗衣机,第三个洗衣机相对于第二个也是同理,把数组种第一个的值加在第二个上面就是第二个洗衣机需要或者多余的衣服数,统计每次处理后数组绝对值的最大值ans2,最终答案就是ans1和ans2中的最大值。具体可见————解题方法

    class Solution {
    public:
        int findMinMoves(vector<int>& machines) {
            int sum=0,sz=machines.size();
            for(int i=0;i<sz;i++)
                sum+=machines[i];
            if(sum%sz!=0) return -1;
            int per=sum/sz;
            int ans=0;
            for(int i=0;i<sz;i++)
                {
                    machines[i]-=per;
                    if(machines[i]>0) ans=max(ans,machines[i]);
                }
            for(int i=1;i<sz;i++)
                {
                machines[i]+=machines[i-1];
                ans=max(ans,abs(machines[i]));
                }
            return ans;
        }
    };
    
  • 相关阅读:
    rip协议
    IP地址的计算以及子网掩码的计算
    jQuery知识点
    JavaScript 语言编程学习路线
    JS中AJAX知识
    .以及JDK1.5ConcurrentHashMap新特性
    Java程序执行顺序
    观察者设计模式
    Servlet中Filter的学习
    JDBC和连接池知识点
  • 原文地址:https://www.cnblogs.com/ambition-hhn/p/12877423.html
Copyright © 2011-2022 走看看