代码随想录算法训练营第二十九天|贪心算法part3

134. 加油站
题目链接: 134. 加油站 - 力扣(LeetCode)
文章讲解: 代码随想录
class Solution {
public:
    int canCompleteCircuit(vector& gas, vector& cost) {
        vectordiff;
        for(int i=0;i=0){
                startindex=i;
            }
            sum+=diff[i];
            if(sum<0){           //重置区间开始
                sum=0;
                start=true;
                startindex=-1;
            }
            else{
                start=false;
            }
        }
        return startindex; 
    }
};

135. 分发糖果


题目描述:135. 分发糖果 - 力扣(LeetCode)

文章讲解:代码随想录

错误解答:

找出最小元素 然后从左向右和从由向左遍历
不能满足这种情况 15432这种
此时我的分配是1 2 1 0 -1 显然不满足
正确思路:

从左到右遍历一遍 

再从左到右遍历一遍  

这样两次遍历后既能考虑到左邻居 又能考虑到右邻居

class Solution {
public:
    int candy(vector& ratings) {
        int size=ratings.size();
        vectorresult(ratings.size(),1);
        for(int i=1;iratings[i-1]){
                result[i]=result[i-1]+1;
            }
        }
        for(int i=size-2;i>=0;i--){
            if(ratings[i]>ratings[i+1]){         //从后往前
                result[i]=max(result[i+1]+1,result[i]);   //这里用max
                
            }
        }
        int sum=0;
        for(auto x:result){
            sum+=x;
        }
        return sum;
        
    }
};

860.柠檬水找零

题目链接:860. 柠檬水找零 - 力扣(LeetCode)

文章讲解:代码随想录

 思路:

简单题 用一个三维数组来存放各种钱的张数

class Solution {
public:
    bool lemonadeChange(vector& bills) {
        if(bills[0]!=5)return false;
        vectornums(3,0);
        nums[0]++;
        for(int i=1;i

406.根据身高重建队列


题目链接:406. 根据身高重建队列 - 力扣(LeetCode)

文章讲解:代码随想录

 思路:

刚看题目的时候没有什么思路
 

先按身高从大到小排序(身高相同再考虑第二维度)

再遍历队列 考虑第二维度 第二维度插到正确位置就可以了

解题代码:

class Solution {
public:
    static bool cmp(vector&a,vector&b){
        if(a[0]==b[0]){
            return a[1]b[0];
    }
    vector> reconstructQueue(vector>& people) {
        //身高从大到小排序

        sort(people.begin(),people.end(),cmp);
        vector>ans;
        for(int i=0;i

注意的地方:

第一排序函数的比较符号定义

    static bool cmp(vector&a,vector&b){
        if(a[0]==b[0]){
            return a[1]b[0];
    }

static关键字 声明要有  记得带引用 从大到小就用大于号 从小到大就用小于号

cmp作为sort函数的第三个参数

在vector的某个位置插入元素可以用:

nums.insert(nums.begin()+position,x);


 

你可能感兴趣的:(贪心算法,算法)