当前位置: 首页 > article >正文

力扣(134.860.406.452)补9.26

力扣200题了,留个小小的纪念。

134.加油站

这题我用2层循环可以通过35/39个用例,但是卡在一个死变态的,数据贼多,超过时间限制了。

class Solution {

public:

    int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {

        for(int i=0;i<gas.size();i++){

            if(gas[i]>=cost[i]){

                int sum=gas[i]-cost[i];

                int j=0;

                for(j=(i+1)%gas.size();j!=i;j=(j+1)%gas.size()){

                    sum=sum+gas[j]-cost[j];

                    if(sum<0||(sum==0&&(j+1)%gas.size()!=i)) break;

                }

                if(j==i){

                    return i;

                }

            } 

        }

        return -1;

    }

};

不过我现在也发现了,贪心不是一个意义非常明确的算法,感觉就是没有一个固定的套路,更多的是数学上的思考吧。所以除了暴力我完全不会这题。题解也没看明白。。算了,我真的头疼了。。这题就当没做过有缘再见吧。做题别那么轴。

860.柠檬水找零

没想出来,这题一开始没想清楚怎么做,怎么也想不到贪心算法上,其实贪心,就是数学思维题,想通了就简单,想不通就一直卡着。其实就是记录自己手里的5元,10元,钞票的个数。

因为10元钞票只能用于顾客给20元的时候,所以优先找别人10元钞票,再找5元的,只要手里钞票不出现负数就可以了。

这个就是考思维的地方。

class Solution {

public:

    bool lemonadeChange(vector<int>& bills) {

        vector<int> a(2,0);

        if(bills[0]!=5){

            return false;

        }

        a[0]=1;

        for(int i=1;i<bills.size();i++){

            if(bills[i]==5){

                a[0]++;

            }

            if(bills[i]==10){                

                a[1]++;

                a[0]--;

            }

            if(bills[i]==20){

                if(a[1]>=1) 

                {a[1]--;

                a[0]-=1;}

                else{

                    a[0]-=3;

                }

            }

            if(a[0]<0||a[1]<0)

            return false;

        }

        return true;

    }

};

406.根据身高重建队列

c++的东西早就忘了差不多了,要不是4月8号有个蓝桥杯,都没什么能督促我刷算法了。

begin:返回指向容器第一个元素的迭代器

end:返回指向容器最后一个元素下一个位置的迭代器

str1=str1(被插入字符串).insert(插入位置,str2(被插入字符串),n ,m)

在下标处插入东西,原来的东西整体后移。

ps:n,m分别是插入字符串要截取的(真正要插入的部分)即在str2.n位置数m个,不写这个的话就是将str2整个全部插入。

c5b68fe1687c47d5b15eb33dcc041cf3.png

这里自己模拟一遍会发现思路比较清晰了。先对数组进行排序在插入很重要。

class Solution {

public:

    vector<vector<int>> reconstructQueue(vector<vector<int>>& people) {

        sort(people.begin(),people.end(),[](const vector<int>&u,const vector<int>&v){

            return u[0]>v[0]||(u[0]==v[0]&&u[1]<v[1]);

        });

        vector<vector<int>> ans;

        for(int i=0;i<people.size();i++){

            if(people[i][1]<i)

            ans.insert(ans.begin()+people[i][1],people[i]);

            else ans.push_back(people[i]);

        }

        return ans;

    }

};

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

这题的贪心我实在不明白,凭啥局部最优能得到整体最优,凭啥,凭啥。。。没有严格的数学证明,我实在不能接受啊啊啊啊啊啊啊。

 

 

 

 

 

 


http://www.kler.cn/a/6433.html

相关文章:

  • css让按钮放在最右侧
  • Redis存在安全漏洞
  • 8位移位寄存器的verilog语言
  • Linux网络基础--传输层Tcp协议(上) (详细版)
  • apache-tomcat-6.0.44.exe Win10
  • UDP系统控制器_音量控制、电脑关机、文件打开、PPT演示、任务栏自动隐藏
  • Spring框架AOP增强,动态代理
  • Cursor——ChatGPT的替代品【笔记】
  • linux GlusterFS文件系统 | GFS分布式文件系统群集部署 | 超详细
  • 心理咨询师证书有用吗 有必要考吗
  • Python高阶函数(Higher-order Function)
  • GFS分布式文件系统
  • 【系统可靠性】搭建可靠性系统工程实践
  • 【ArcGIS微课1000例】0067:Nodata数据处理的3种方法案例教程
  • 马上中秋节了,Python带你实现查票以及购票....
  • 文章三:Python网络编程实战:爬虫技术入门与实践
  • 【蓝桥杯冲刺】KMP算法
  • Linux命令·vmstat
  • 【新2023Q2押题JAVA】华为OD机试 - 整理扑克牌
  • gpt4人工智能怎么下载-chatgpt哪里下载
  • 线性表的顺序存储结构具体实现 代码实战 赛博图书馆搭建指南(使用C\C++语言)
  • JavaScript数组对象的浅拷贝与深拷贝(二)实现对象深拷贝的方法(5种)
  • javaScript蓝桥杯----偷梁换柱
  • 什么是语法糖?c语言中有哪些
  • Android布局层级过深为什么会对性能有影响?为什么Compose没有布局嵌套问题?
  • 基于Springboot和MybatisPlus的外卖项目 瑞吉外卖Day4