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

news2025/1/22 9:17:33

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.coloradmin.cn/o/1344339.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

读算法霸权笔记07_筛选

1. 美国残疾人法案 1.1. 1990年 1.2. 公司在招聘时使用身体检查是非法的 1.3. 有某些心理健康问题的人被“亮了红灯”&#xff0c;他们因此没能找到一份正常的工作&#xff0c;过上正常的生活&#xff0c;这就使其进一步被社会孤立&#xff0c;而这正是《美国残疾人法案》要…

万界星空低代码云MES-才是工业MES的未来

万界星空科技作为一家在云MES系统的研发、生产自动化方面拥有很多年行业经验的科技型企业&#xff0c;多年来专注于云MES系统的研发与技术支持服务&#xff0c;目前已成为国内知名的智能制造整体解决方案提供商。 近几年&#xff0c;万界星空科技发掘制造行业生产及物流难点、…

算法基础之蒙德里安的梦想

蒙德里安的梦想 核心思想&#xff1a; 状态压缩dp 总方案 横放的方案 剩下的地方竖着放是固定的了 状态压缩 &#xff1a; 将每一列的图(横终点 横起点 竖) 用一个二进制数存下 向后凸的为1 反之为0 状态计算&#xff1a; 所有 i – 1 列 不冲突的 都加和 f[i , j] f[i - 1…

三个故事,谈谈小米汽车技术发布会

都说新年新气象&#xff0c;随着年末消费旺季到来&#xff0c;汽车市场越来越热闹了。 继蔚来12月23日公布旗舰车型ET9&#xff0c;华为26日发布问界M9&#xff0c;小米汽车首款量产车型SU7终于正式亮相。 12月28日&#xff0c;在小米汽车技术发布会上&#xff0c;小米创办人…

Apache Flink连载(二十一):Flink On Yarn运行原理-Yarn Application模式

🏡 个人主页:IT贫道_大数据OLAP体系技术栈,Apache Doris,Clickhouse 技术-CSDN博客 🚩 私聊博主:加入大数据技术讨论群聊,获取更多大数据资料。 🔔 博主个人B栈地址:豹哥教你大数据的个人空间-豹哥教你大数据个人主页-哔哩哔哩视频 目录 1. 任务提交命令

SpringBoot 实现Execl 导入导出

1、引包 <dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-base</artifactId><version>3.0.3</version></dependency><dependency><groupId>cn.afterturn</groupId><artifactId>easy…

基于element-ui table组件的二次封装

文章目录 配置数据基础分析封装 el-table-column使用插槽强化结语 相信 element-ui 大家都有所耳闻&#xff0c;table 也是老朋友了&#xff0c;不过在使用它的时候大家是怎么使用的呢&#xff1f;是直接在官网上cv使用吗&#xff1f;这种方式&#xff0c;我相信写起来会有点小…

[2024] 十大免费电脑数据恢复软件——轻松恢复电脑上已删除文件

哈喽大家好&#xff01;你有没有需要适用于电脑的免费数据恢复软件呢&#xff1f;数据丢失可是个烦心事&#xff0c;无论是硬件故障还是软件损坏&#xff0c;甚至是意外删除、格式化或计算机病毒&#xff0c;都让人郁闷至极。当你遇到数据丢失的情况时&#xff0c;你一定希望能…

基于huffman编解码的图像压缩算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 Huffman编码算法步骤 4.2 Huffman编码的数学原理 4.3 基于Huffman编解码的图像压缩 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 ..…

在Linux上搭建Maven仓库的实战教程

引言 在Java开发中&#xff0c;Maven作为项目构建和依赖管理的重要工具&#xff0c;其仓库的搭建至关重要。本文将手把手教你如何在Linux系统上安装并配置Nexus Repository Manager 3&#xff08;简称Nexus 3&#xff09;&#xff0c;从而创建一个私有的Maven仓库。 步骤一&a…

浅谈水下起重顶升作业使用千斤顶的可能性

并非所有起重顶升的施工环境全为常规环境&#xff0c;除了传统的陆上作业之外&#xff0c;难免也会有一些特殊环境下的起重顶升任务&#xff0c;其中比较典型的自然是水下起重顶升作业&#xff0c;那么千斤顶究竟能在水下进行起重顶升作业吗&#xff1f;接下来成华制造来给大家…

04-获取认证的用户身份信息

存储用户信息的方式 获取用户信息的流程 用户提交账号和密码后,DaoAuthenticationProvider调用UserDetailsService接口实现类的loadUserByUsername()方法,该方法可以接收请求参数username的值,然后根据该值查询用户信息,最后将账号,密码,权限封装到UserDetails对象中并返回给…

I.MX6ULL_Linux_驱动篇(51)linux 音频驱动

音频是我们最常用到的功能&#xff0c;音频也是 linux 和安卓的重点应用场合。 I.MX6ULL 带有 SAI接口&#xff0c;正点原子的 I.MX6ULLALPHA 开发板通过此接口外接了一个 WM8960 音频 DAC 芯片&#xff0c;本章我们就来学习一下如何使能 WM8960 驱动&#xff0c;并且通过 WM89…

flask之文件管理系统-项目 JRP上线啦!!! ---修订版,兼容Windows和Linux系统

上一章的版本https://blog.csdn.net/weixin_44517278/article/details/135275066&#xff0c;在Windows下debug完成无异常后&#xff0c;上传到我的树莓下开始正式服役 由于开发环境是Windows&#xff0c;使用环境是Linux&#xff0c;导致最后没能成功运行起来 这个版本是今天去…

Elasticsearch:升级索引以使用 ELSER 最新的模型

在此 notebook 中&#xff0c;我们将看到有关如何使用 Reindex API 将索引升级到 ELSER 模型 .elser_model_2 的示例。 注意&#xff1a;或者&#xff0c;你也可以通过 update_by_query 来更新索引以使用 ELSER。 在本笔记本中&#xff0c;我们将看到使用 Reindex API 的示例。…

【Linux C 几种锁的性能对比】 1.读写锁 2.互斥锁 3.自旋锁 4.信号量 5.rcu

直接上代码 rcu.c #include <stdio.h> #include <stdlib.h> #include <unistd.h>#include <pthread.h> #include <limits.h> #include <semaphore.h> #include <urcu.h>/* 1.读写锁2.互斥锁3.自旋锁4.信号量5.rcu */#define RW_LOC…

基于 Linux 的批量上传本地 Git 仓库到 Github 的实践

基于 Linux 的批量上传本地 Git 仓库到 Github 的实践 一、需求二、上传本地 Git 仓库2.1 初始版本2.2 优化版本 三、 GitHub 创建空仓库3.1 初始版本3.2 优化版本 四、Gitee 创建空仓库 一、需求 app目录下的每个文件夹都是一个git仓库&#xff0c;如何使用shell脚本将所有gi…

Python/R/GUI/BI类型常用数据可视化工具

什么是数据可视化工具&#xff1f; 数据可视化工具是指旨在可视化数据的所有形式的软件。它们处理数据输入&#xff0c;将其转换为用户可以根据自己的需求进行定制的视觉效果。 不同的工具可以包含不同的功能&#xff0c;但最基本的是&#xff0c;数据可视化工具提供输入数据集…

交叉编译含义

交叉编译是在一个平台上生成另一个平台上的可执行代码。同一个体系结构可以运行不同的操作系统&#xff1b;同样&#xff0c;同一个操作系统也可以在不同的体系结构上运行。 编译工具链下载&#xff1a; (1) ARM提供&#xff1a;Arm GNU Toolchain Downloads – Arm Develope…