第十五周 Leetcode 517. Super Washing Machines(HARD) 贪心

Leetcode517

很有趣的一道题

由于每一步可以任选某些数字对它们进行转移,所以实际上是在求最优解中的最复杂转移数。

那么我们考虑,到底哪一个位置要经过的流量最大呢?

枚举每个位置,考虑它左边的整体需求和右边的整体需求,如果两边都需要流入,则流量相加;

  如果一边需要流入,一边需要流出,则取绝对值的最大值。

复杂度O(n)

class Solution {
public:
    int findMinMoves(vector<int>& machines) {
        int len = machines.size();
        vector<int> sum(len + 1, 0);
        for (int i = 0; i < len; ++i)
            sum[i + 1] = sum[i] + machines[i];

        if (sum[len] % len) return -1;

        int avg = sum[len] / len;
        int res = 0;
        for (int i = 0; i < len; ++i)
        {
            int l = i * avg - sum[i];
            int r = (len - i - 1) * avg - (sum[len] - sum[i] - machines[i]);

            if (l > 0 && r > 0)
                res = std::max(res, std::abs(l) + std::abs(r));
            else
                res = std::max(res, std::max(std::abs(l), std::abs(r)));
        }
        return res;
    }
};

  

时间: 2024-07-31 19:37:35

第十五周 Leetcode 517. Super Washing Machines(HARD) 贪心的相关文章

每周进度条(第十五周)

第十五周进度条   第十五周 所花时间 1h 代码量(行)  100 博客量(篇)  1 学到的知识 对图片的处理 在Android程序中加入图片

每周进度表(第十五周)

  第十五周 所花时间(包括上课) 5(小时) 代码量(行) 200 博客量(篇) 7 了解到的知识点 如何对界面进行美化 如何处理anroid里的图片

学习进度条(十五周)

本周主要是对于团队开发项目的修改完善.   第十五周 所花时间(包括上课) 上课2小时,课后10小时 代码量(行) 200+ 博客量 2 了解到的知识点 服务器连接GET方法

学习进度条--第十五周

  第十五周 所花时间(包括上课时间) 4小时(包括上课2小时) 代码量(行) 70 博客量(篇) 1篇 了解到的知识点 软件的开发文档具有重要作用,书面计划是精确和可以沟通的. 软件开发中应及时解决遇到问题,不然容易造成不可挽回的错误.

第十五周周总结

周数 专业学习目标 专业学习时间 新增代码量 人文方面的学习 知识技能总结 第 十 五 周 数据结构:学习与排序有关的知识 4h 300左右 练习与排序有关的习题 计算机网络:继续练习网络服务器的搭建 3h 300左右 继续练习网络服务器的搭建 WEB:继续学习个人主页相关知识点 3h 300左右 练习个人主页相关知识点

第十五周进度条

第十五周          日期  星期一   星期二   星期三   星期四   星期五   星期六   星期日  了解到的知识点   分页分为真分页和加分页:假分页是先将所需要的数据全部查询出来(坏处是第一次很慢好处是点击下一页会很快)真分页是只查询需要的那几条(比如select * from table limit(0,5))(每次运行时间一样) jsp进入页面鼠标落到指定文本框 function setfocus(){   UserName.focus();} <body ><i

信息安全系统设计基础第十五周总结

信息安全系统设计基础第十五周总结 [内容:链接汇总] 一.每周读书笔记链接汇总 [第一周读书笔记] http://www.cnblogs.com/shadow135211/p/4824555.html [第二周读书笔记] http://www.cnblogs.com/shadow135211/p/4842258.html [第三周读书笔记] http://www.cnblogs.com/shadow135211/p/4854920.html [第四周读书笔记] (读书笔记从“第一周”开始命名,为

十五周 项目1 工资数据的输入

/* 输入员工工资1000-10000之间,并按从大到小输出*/ #include <iostream> using namespace std; int main( ) { double salarys[500]; int n=0; double t; while(cin>>salarys[n]) { n++; //从cin流读取数据 } //将n名职工的工资排序后输出 for(int i=0; i<n; i++) for(int j=0; j<n-1; j++) {

第十五周进度

时间 学习花费时间 代码量 博客量 学习的知识点或缺陷 第十五周 10 200 1 写SQL语句的时候,要注意返回null的情况,例如: <select id="getFileSize" resultType="Long">SELECT sum(file_size) as fileSize FROM file_nodes WHERE uid=#{uid}</select> 上述SQL语句,有可能返回null,因此resultType必须用Lo