代码随想录算法训练营DAY29第八章 贪心算法 part03

目录

[134. 加油站](#134. 加油站)

[135. 分发糖果](#135. 分发糖果)

[860. 柠檬水找零](#860. 柠檬水找零)

[406. 根据身高重建队列](#406. 根据身高重建队列)


134. 加油站

cpp 复制代码
class Solution {
public:
    int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {
        int ans=0;
        int sum=0;
        int minsum=0;
        for(int i=0;i<gas.size();i++){
            sum+=gas[i]-cost[i];
            if(sum<minsum){
                minsum=sum;
                ans=i+1;
            }
        }
        if(sum<0)return -1;
        else return ans;
    }
};

135. 分发糖果

cpp 复制代码
class Solution {
public:
    int candy(vector<int>& ratings) {
        int n=ratings.size();
        int ans=n;
        vector<int> left(n);
        for(int i=0;i<n;i++){
            if(i&&ratings[i]>ratings[i-1])left[i]=left[i-1]+1;
            else left[i]=0;
        }
        int right=0;
        for(int i=n-1;i>=0;i--){
            if(i!=n-1&&ratings[i]>ratings[i+1])right++;
            else right=0;
            ans+=max(left[i],right);
        }
        return ans;
    }
};

860. 柠檬水找零

cpp 复制代码
class Solution {
public:
    bool lemonadeChange(vector<int>& bills) {
        unordered_map<int,int> map;
        for(int t:bills){
            if(t==5)map[5]++;
            else if(t==10){
                if(map[5])map[5]--;
                else return false;
                map[10]++;
            }
            else {
                if(map[10]&&map[5]){
                    map[10]--;
                    map[5]--;
                }
                else if(map[5]>=3){
                    map[5]-=3;
                }
                else return false;
                map[20]++;
            }
        }
        return true;
    }
};

406. 根据身高重建队列

cpp 复制代码
class Solution {
    static bool com(vector<int>& a,vector<int>& b){
        if(a[0]!=b[0])return a[0]>b[0];
        else return a[1]<b[1];
    }
public:
    vector<vector<int>> reconstructQueue(vector<vector<int>>& people) {
        vector<vector<int>>ans;
        sort(people.begin(),people.end(),com);
        for(int i=0;i<people.size();i++){
            int k=people[i][1];
            ans.insert(ans.begin()+k,people[i]);
        }
        return ans;
    }
};
相关推荐
aramae6 小时前
MySQL复合查询(8)
java·c语言·开发语言·后端·算法
荆棘鸟智能7 小时前
城市感知设备怎么统一接入?从多协议网关到设备模型的中间件架构设计
人工智能·算法·边缘计算
INGNIGHT11 小时前
270 · 电话号码的字母组合II(Trie)
linux·算法
2401_8390805411 小时前
C++常见八股
数据结构·c++·算法
青山是哪个青山12 小时前
LeetCode 188:买卖股票的最佳时机 IV
算法
mikuyyds12 小时前
geo-toolbox 插件算法解析:RUSLE 与 MUSLE 的工程化落地
算法·rust·gis
a1879272183112 小时前
【算法】树(二):队列与祖先——BFS 骨架三配件、短路透传与合流
算法·leetcode·二叉树··bfs·算法讲解·树遍历
syagain_zsx12 小时前
算法基础篇 · 03 枚举(C++ 题解)
c++·算法·二进制·枚举
weixin_3077791313 小时前
C++代码实现MATLAB中的ode23tb函数功能
开发语言·c++·算法·matlab
我是章汕呐14 小时前
地级市能源消耗量及消耗强度数据【2006-2023年】平衡面板
人工智能·经验分享·算法·回归