leecode1953 | 你可以工作的最大周数

给你 n 个项目,编号从 0 到 n - 1 。同时给你一个整数数组 milestones ,其中每个 milestones[i] 表示第 i 个项目中的阶段任务数量。

你可以按下面两个规则参与项目中的工作:

每周,你将会完成 某一个 项目中的 恰好一个 阶段任务。你每周都 必须 工作。
在 连续的 两周中,你 不能 参与并完成同一个项目中的两个阶段任务。
一旦所有项目中的全部阶段任务都完成,或者仅剩余一个阶段任务都会导致你违反上面的规则,那么你将 停止工作 。注意,由于这些条件的限制,你可能无法完成所有阶段任务。

返回在不违反上面规则的情况下你 最多 能工作多少周。

 

示例 1:

输入:milestones = [1,2,3]
输出:6
解释:一种可能的情形是:
​​​​- 第 1 周,你参与并完成项目 0 中的一个阶段任务。
- 第 2 周,你参与并完成项目 2 中的一个阶段任务。
- 第 3 周,你参与并完成项目 1 中的一个阶段任务。
- 第 4 周,你参与并完成项目 2 中的一个阶段任务。
- 第 5 周,你参与并完成项目 1 中的一个阶段任务。
- 第 6 周,你参与并完成项目 2 中的一个阶段任务。
总周数是 6

class Solution {
public:
    long long numberOfWeeks(vector<int>& milestones) {
        /*
            将所有元素分为两块,最大的数和(总数-最大的数)
            那么 如果最大的数 < (总数 - 最大的数) 说明连最大的数都可以插满,那么ans = sum
            如果最大的数 > (总数 - 最大的数)说明 (总数 - 最大的数)产生的(总数 -  最大的数)的缝隙插不满,必定会造成最大的数会有一部份连续
            这样最大的合规数 为 *(总数 - 最大的数) + (总数 - 最大的数 + 1)
        */
        long long longest = * max_element(milestones.begin(), milestones.end());

        long long ans = 0;
        for(auto& milestone : milestones){
            ans += milestone;
        }
        // 5 2 1    ans = 8
        // return 7
        if(longest > ans - longest + 1){
            return (ans - longest) * 2 + 1; 
        } 
        return ans;
    }
};

/*
 x << longest

 _ | _ | _


*/


有一阵子没有更新了,我在整理自己的博客,然后使用githu page + hugo + theme 搭建静态博客,然后在那里装修
哈哈哈哈
你相信命运吗?为什么人斗不过命?

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值