【算法/贪心算法/两个维度权衡问题】题解+详细备注(共2题)

【算法/贪心算法/两个维度权衡问题】题解+详细备注(共2题)

135.分发糖果

class Solution {
public:
    int candy(vector<int>& ratings) {
        int n = ratings.size();

        vector<int> result(n,1);// 初始化很重要,全部初始化为1
		
		// 从前往后贪心
        for(int i{1};i < n;++i){
            if(ratings[i] > ratings[i-1]){
                result[i] = max(result[i],result[i-1]+1);
            }
        }
		// 从后往前贪心
        for(int i{n-2};i>=0;i--){
            if(ratings[i] > ratings[i+1]){
                result[i] = max(result[i],result[i+1] + 1);
            }
        }

        return accumulate(result.begin(),result.end(),0);
    }
};

406.根据身高重建队列

class Solution {
public:
    // 先使用一个维度,再使用另一个维度
    vector<vector<int>> reconstructQueue(vector<vector<int>>& people) {
    	// 先根据身高进行从大到小排序(倘若身高相同,再按照第二个属性从小到大排队)
        sort(people.begin(),people.end(),[](auto&&a,auto&&b){
            if(a[0] == b[0]) return a[1] < b[1];
            return a[0] > b[0];
        });
        vector<vector<int>> que;
        // 贪心:按照身高从低到高,依次插入到第二个属性的位置
        for(int i{};i<people.size();++i){
            int position = people[i][1];
            que.insert(que.begin() + position,people[i]);
        }

        return que;
    }
};
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一二三o-0-O

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值