代码随想录day35|860.柠檬水找零、 406.根据身高重建队列、 452. 用最少数量的箭引爆气球

860.柠檬水找零

有如下三种情况:

情况一:账单是5,直接收下。
情况二:账单是10,消耗一个5,增加一个10
情况三:账单是20,优先消耗一个10和一个5,如果不够,再消耗三个5
此时大家就发现 情况一,情况二,都是固定策略,都不用我们来做分析了,而唯一不确定的其实在情况三。

而情况三逻辑也不复杂甚至感觉纯模拟就可以了,其实情况三这里是有贪心的。

账单是20的情况,为什么要优先消耗一个10和一个5呢?

因为美元10只能给账单20找零,而美元5可以给账单10和账单20找零,美元5更万能!

所以局部最优:遇到账单20,优先消耗美元10,完成本次找零。全局最优:完成全部账单的找零。

局部最优可以推出全局最优,并找不出反例,那么就试试贪心算法!

406.根据身高重建队列

1.什么是满足队列属性?
2.list的用法:list 是一个双向链表容器,它不支持随机访问和使用 + 操作符来定位元素。(vector底层是数组实现,而list底层是链表实现)
初始化:

#include <iostream>
#include <list>

using namespace std;

int main() {
    // 声明一个int类型的list
    list<int> myList;

    // 在list尾部添加元素
    myList.push_back(1);
    myList.push_back(2);
    myList.push_back(3);

    // 在list头部添加元素
    myList.push_front(0);

    // 迭代器遍历list并打印元素
    for (list<int>::iterator it = myList.begin(); it != myList.end(); ++it) {
        cout << *it << " ";
    }

    return 0;
}

插入和删除:

std::list<int> myList = {1, 2, 3, 4};

// 在迭代器位置之前插入元素
std::list<int>::iterator it = std::find(myList.begin(), myList.end(), 3);
if (it != myList.end()) {
    myList.insert(it, 99);
}

// 删除元素
myList.remove(2);  // 删除所有值为2的元素

return vector<vector>(que.begin(), que.end());

3.static bool cmp(const vector& a, const vector& b)

452. 用最少数量的箭引爆气球

1.判断两个气球重叠之后,如何判断它和下面的气球是否重叠呢?
更新最小右边界

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值