[C++] : 贪心算法专题(第一部分)

1.柠檬水找零:

在这里插入图片描述

1.思路一:

在这里插入图片描述

柠檬水找零

class Solution {
public:
    bool lemonadeChange(vector<int>& bills) {
        int file=0;
        int ten =0;

        for(auto num:bills)
        {
            if(num == 5) file++;
            else if(num == 10)
            {
                if(file > 0)
                    file--,ten++;
                else
                    return false;
            }
            else
            {
                if(ten>=1 && file>=1)
                    ten--,file--;
                else if(file>=3)
                    file-=3;
                else
                    return false;
            }
        }

        return true;
    }
};

GIF题目解析

2. 将数组和减半的最小操作数:

在这里插入图片描述

1.思路一:

将数组和减半的最小操作数

在这里插入图片描述

class Solution {
public:
    int halveArray(vector<int>& nums) {
        //1.求和:
        long long sum = 0;
        for (auto num : nums)
        {
            sum += num;
        }
        //2.计算一半的值:
        long double half = ((long double)sum) / 2;

        //3.记录操作数:
        int count = 0;
        priority_queue<double> qu(nums.begin(), nums.end());

        while (half>0)//等于或者小于都不满足循环条件
        {
            double tmp = qu.top();//获取堆顶数据
            qu.pop();//pop堆顶数据

            tmp /= 2;
            half -= tmp;
            count++;

            qu.push(tmp);
        }
        return count;
    }
};

GIF题目解析

3.最大数:

在这里插入图片描述
最大数

1.思路一:

在这里插入图片描述

class Solution {
public:
    string largestNumber(vector<int>& nums) {
        vector<string> strs;
        for(int num:nums)
        {
            strs.push_back(to_string(num));
        }

        sort(strs.begin(),strs.end(),
        [](const string s1 , const string s2)
            {
                return s1+s2 > s2+s1;
            }
        );

        string ret;
        for(auto str:strs)
        {
            ret+=str;
        }

        //下标访问字符串返回的是char&可读可写类型的数据!
        if(ret[0]=='0') return "0";
        return ret;
    }
};

GIF题目解析

4.摆动序列:

在这里插入图片描述
摆动序列

1.思路一:

在这里插入图片描述

class Solution {
public:
    int wiggleMaxLength(vector<int>& nums) {
        int ret = 0;

        int left = 0;
        int right = 0;
        for(int i = 0 ; i < nums.size() - 1  ; i++)
        {
            right = nums[i+1] - nums[i];
            if(right == 0) continue;

            if(left*right <= 0) ret++; 
            left = right;
        }

        //第一个点是没有加入进来的!
        return ret+1;
    }
};

GIF题目解析

5.最长递增子序列

在这里插入图片描述
最长递增子序列

1.思路一:dp方法

在这里插入图片描述

class Solution {
public:
    int lengthOfLIS(vector<int>& nums) {
        int n = nums.size();
        vector<int> dp(n,1);

        //1.开始遍历:
        int ret = 0;

        for(int i=1 ; i<n;i++)
        {
            //1.计算从0到i-1的递增子序列
            for(int j=0;j<i;j++)
            {
                if(nums[j] < nums[i])
                {
                    //1.注意:
                    dp[i] = max(dp[j]+1 , dp[i]); 
                }
            }
            ret = max(dp[i] , ret);
        }
        return ret;
    }
};

GIF题目解析

请添加图片描述

2.思路二:在dp基础上进行的贪心优化:

在这里插入图片描述

class Solution {
public:
    int lengthOfLIS(vector<int>& nums) {
        //1.创建dp数组保存当前遍历到的位置的递增字序列元素
        vector<int> dp;
        //1-1:第一个数一定开始就在dp里面了!
        dp.push_back(nums[0]);
        int n = nums.size();

        //2.遍历顺序表:
        for(int cur=1 ; cur<n ; cur++)
        {
            //1.比最后一个数都大直接push_back()
            if(nums[cur] > dp.back()) 
            {
                dp.push_back(nums[cur]);
            }

            //2.二分寻找!
            else 
            {
                int left = 0 , right = dp.size()-1;
                while(left < right)
                {
                    int mid = left + (right - left)/2;
                    if(dp[mid] < nums[cur]) left = mid + 1;
                    else right = mid; 
                }
                //3.找到数据更新!
                dp[left] = nums[cur];
            }
        }

        return dp.size();
    }
};

GIF题目解析

请添加图片描述

6.递增的三元子序列

在这里插入图片描述

递增的三元子序列

1.思路一:

在这里插入图片描述

class Solution {
public:
    bool increasingTriplet(vector<int>& nums) {
        int one = nums[0];
        int two = INT_MAX;

        for(int cur = 1 ; cur < nums.size() ; cur++)
        {
            if(nums[cur] > two) return true;
            else if(nums[cur] < two)
            {
                if(nums[cur] <= one) one = nums[cur];
                else two = nums[cur];
            }
        }
        return false;
    }
};

GIF题目解析

7.最长连续递增序列

在这里插入图片描述

最长连续递增序列

1.思路一:

在这里插入图片描述

class Solution {
public:
    int findLengthOfLCIS(vector<int>& nums) {
        int i=0;
        int ret = 0;
        while(i < nums.size())
        {
            int j = 0;
            for(j = i;j<nums.size()-1;j++)
            {
                if(nums[j] >= nums[j+1]) break;
            }
            ret = max(ret , j-i+1);
            //贪心思路j的位置在连续递增子序列的最后一个位置!
            i = j+1;
        }
        return ret;
    }
};

GIF题目解析:

请添加图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/279688.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python生成器 (Generators in Python)

Generators in Python 文章目录 Generators in PythonIntroduction 导言贯穿全文的几句话为什么 Python 有生成器Generator&#xff1f;如何获得生成器Generator&#xff1f;1. 生成器表达式 Generator Expression2. 使用yield定义生成器Generator 更多Generator应用实例表示无…

准备用vscode代替sourceinsight

vscode版本1.85.1 有的符号&#xff0c;sourceinsight解析不到。 看网上说vscode内置了ripgrep&#xff0c;但ctrlshiftf在文件里查找的时候&#xff0c;速度特别慢&#xff0c;根本不像ripgrep的速度。ripgrep的速度是很快的。 但今天再查询&#xff0c;速度又很快了&#x…

Large-Precision Sign using PBS

参考文献&#xff1a; [CLOT21] Chillotti I, Ligier D, Orfila J B, et al. Improved programmable bootstrapping with larger precision and efficient arithmetic circuits for TFHE[C]//Advances in Cryptology–ASIACRYPT 2021: 27th International Conference on the T…

前后端分离nodejs+vue+ElementUi网上订餐系统69b9

课题主要分为两大模块&#xff1a;即管理员模块和用户模块&#xff0c;主要功能包括个人中心、用户管理、菜品类型管理、菜品信息管理、留言反馈、在线交流、系统管理、订单管理等&#xff1b; 运行软件:vscode 前端nodejsvueElementUi 语言 node.js 框架&#xff1a;Express/k…

10.定时器各功能分析及编码

知识汇总&#xff1a; STM32的定时器有三种&#xff0c;高级定时器&#xff0c;通用定时器&#xff0c;基本定时器 就是功能多与少的差别&#xff0c;下面来逐个解释功能&#xff1a;在此之前&#xff0c;需要对几个概念有认知 几个概念&#xff1a; 1.定时器时钟频率&…

【论文笔记】Radar Fields: An Extension of Radiance Fields to SAR

原文链接&#xff1a;https://arxiv.org/abs/2312.12961 1. 引言 本文针对合成孔径雷达&#xff08;SAR&#xff09;的3D重建&#xff0c;提出雷达场&#xff0c;基于多个SAR对场景的测量学习体积模型。 3. 辐射场的介绍 NeRF将静态场景表达为连续的体积函数 F \mathcal{F}…

长城杯2021政企组-魔鬼凯撒的RC4茶室 WP

魔鬼凯撒的RC4茶室 知识点&#xff1a;UPX 移位密码 XOR 分析 查壳 32bit&#xff1b;UPX壳&#xff0c;upx -d直接脱。 查看主函数。 第一处输入Str1然后做一个比较。这里进去。 有个小技巧&#xff0c;这里传入的参数是Str字符串&#xff0c;但是原本IDA自动识别出来的…

智能监控平台/视频共享融合系统EasyCVR海康设备国标GB28181接入流程

TSINGSEE青犀视频监控汇聚平台EasyCVR可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及支持厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安防视频监控的能力&…

shiro1.10版本后-IniSecurityManagerFactory过期失效

1、问题概述&#xff1f; 今天在研究了shiro的新版本shiro1.13.0版本&#xff0c;发现用了很长时间的IniSecurityManagerFactory工厂失效了。 从下图中可以看出&#xff0c;在新版本中IniSecurityManagerFactory被打上了过期线了。 那么问题来了&#xff0c;新版本如何使用呢…

Python 命令补全工具 argcomplete

1. 概述 在使用Python 命令或者 Python的命令行工具的时候&#xff0c;一个痛点是没有补全。比如python -m后面输入包名字&#xff0c;就没有提示&#xff0c;每次想运行一个http server的时候&#xff0c;都需要搜索一下http服务的包名。另外&#xff0c;像pip&#xff0c;pi…

Java注解学习,一文掌握@Autowired 和 @Resource 注解区别

&#x1f3c6;作者简介&#xff0c;普修罗双战士&#xff0c;一直追求不断学习和成长&#xff0c;在技术的道路上持续探索和实践。 &#x1f3c6;多年互联网行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &#x1f389;欢迎 &#x1f44d;点赞✍评论…

【前端面经】即时设计

目录 前言一面git 常见命令跨窗口通信vue 响应式原理发布订阅模式翻转二叉树Promise.all()扁平化数组面试官建议 二面Event Loop 原理Promise 相关css 描边方式requestAnimationReact 18 新特性JSX 相关react 输出两次函数式编程React 批处理机制http请求头有哪些本地存储性能优…

秒杀系统的设计思路(应对高并发,超卖等问题的解决思路)

首先我们先看一下设计秒杀系统时&#xff0c;我们应该考虑的问题。 解决方案&#xff1a; 一.页面静态化结合CDN内容分发 前端把能提前放入cdn服务器的东西都放进去&#xff0c;反正把所有能提升效率的步骤都做一下&#xff0c;减少真正秒杀时候服务器的压力。 秒杀活动的页面…

年度总结和规划

年度总结和规划 目录概述需求&#xff1a; 设计思路实现思路分析1.技术总结2.管理总结3.职业计划比较 参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your perfect code,full busy&#xff0c;skip hardness,make a better result,wait…

利用F12和Fiddler抓包

网络基础 http 而http协议又分为下面的部分,点击具体条目后可以查看详细信息 http请求消息:请求行(请求方法),请求路径,请求头,请求体(载荷) http响应消息:响应行(响应状态码),响应头&#xff0c;响应体 请求行 即请求方法 get post put patch 响应行 即响应码,常见响应状态…

Java基础02-Java编程基础

文章目录 变量&#xff08;Variables&#xff09;局部变量和成员变量局部变量&#xff08;Local Variables&#xff09;成员变量&#xff08;Instance Variables&#xff09; 标识符&#xff08;Identifiers&#xff09;八种基本数据类型原始数据类型&#xff08;Primitive Dat…

java中如何使用elasticsearch—RestClient操作文档(CRUD)

目录 一、案例分析 二、Java代码中操作文档 2.1 初始化JavaRestClient 2.2 添加数据到索引库 2.3 根据id查询数据 2.4 根据id修改数据 2.4 删除操作 三、java代码对文档进行操作的基本步骤 一、案例分析 去数据库查询酒店数据&#xff0c;导入到hotel索引库&#xff0…

python+django超市进销存仓库管理系统s5264

本次设计任务是要设计一个超市进销存系统&#xff0c;通过这个系统能够满足超市进销存系统的管理及员工的超市进销存管理功能。系统的主要功能包括&#xff1a;首页、个人中心、员工管理、客户管理、供应商管理、承运商管理、仓库信息管理、商品类别管理、由管理员和员工&#…

Metapreter 详细教程--进阶教程

常用命令 基本命令 命令说明sysinfo查看系统信息ls列出目录或文件夹pwd获取当前目录地址cd切换目录&#xff0c;注意这里的win系统需要用用两个反斜杠来分割&#xff08;cd c:\windows\system32 &#xff09;help帮助getuid查看当前用户是谁getpid查看当前进程号ps查看所有进…

API 开放平台项目(已整理,已废弃)

项目大纲 前端 React 18Ant Design Pro 5.x 脚手架Ant Design & Procomponents 组件库Umi 4 前端框架OpenAPI 前端代码生成 后端 Java Spring BootMySQL 数据库MyBatis-Plus 及 MyBatis X 自动生成API 签名认证&#xff08;Http 调用&#xff09;Spring Boot Starter&#…
最新文章