[Algorithm][贪心][柠檬水找零][将数组和减半的最少操作次数][最大数][摆动序列]详细讲解

news2024/12/24 8:12:11

目录

  • 1.柠檬水找零
    • 1.题目链接
    • 2.算法原理详解
    • 3.代码实现
  • 2.将数组和减半的最少操作次数
    • 1.题目链接
    • 2.算法原理详解
    • 3.代码实现
  • 3.最大数
    • 1.题目链接
    • 2.算法原理详解
    • 3.代码实现
  • 4.摆动序列
    • 1.题目链接
    • 2.算法原理详解
    • 3.代码实现


1.柠檬水找零

1.题目链接

  • 柠檬水找零

2.算法原理详解

  • 分情况讨论
    • 如果是5元,只接收下
    • 如果是10元,找零5元之后,收下
    • 如果是20元,则出现贪心策略
      • 先优先考虑10 + 5的组合
      • 如果凑不出来,则拼凑5 + 5 + 5的组合

3.代码实现

bool lemonadeChange(vector<int>& bills) 
{
    int five = 0, ten = 0;
    for(auto& x : bills)
    {
        if(x == 5)
        {
            five++;
        }
        else if(x == 10)
        {
            if(five == 0) 
            {
                return false;
            }
            else
            {
                five--;
                ten++;
            }
        }
        else
        {
            if(ten && five)
            {
                ten--;
                five --;
            }
            else if(five >= 3)
            {
                five -= 3;
            }
            else
            {
                return false;
            }
        }
    }

    return true;
}

2.将数组和减半的最少操作次数

1.题目链接

  • 将数组和减半的最少操作次数

2.算法原理详解

  • 思路:贪心 + 大根堆
  • 贪心:每次挑选当前数组中,最大的那个数,然后减半,直到数组和减少到至少一半为止

3.代码实现

int halveArray(vector<int>& nums) 
{
    double sum = 0.0;
    priority_queue<double> heap;

    for(const auto& x : nums)
    {
        heap.push(x);
        sum += x;
    }
    sum /= 2.0;

    int count = 0;
    while(sum > 0)
    {
        double tmp = heap.top() / 2;
        heap.pop();

        sum -= tmp;
        count++;
        heap.push(tmp);
    }

    return count;
}

3.最大数

1.题目链接

  • 最大数

2.算法原理详解

  • 贪心:正确的排序顺序,确定谁在前,谁在后
    • ab > baa前,b
    • ab == ba:无所谓
    • ab < bab前,a
  • 优化:把数转化成字符串,然后拼接字符串,比较字典序
  • 策略:本题只需要给出排序策略,排序工作可以通过调用sort()完成
  • 返回值:排除前导0
    • ret[0] == 0 ? 0 : ret

3.代码实现

string largestNumber(vector<int>& nums) 
{
    // 优化:先转化成字符串,再比较字典序
    vector<string> strs;
    for(const auto& x : nums)
    {
        strs.push_back(to_string(x));
    }

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

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

    return ret[0] == '0' ? "0" : ret;
}

4.摆动序列

1.题目链接

  • 摆动序列

2.算法原理详解

  • 贪心:统计出所有的波峰以及波谷的数量
    请添加图片描述

  • 如何统计出最终的结果?

    • 统计过程中,可能会有下述几种情况
      请添加图片描述

    • 解决方案:无视/挖空中间平的地方即可

      right = nums[i - 1] - nums[i];
      
      // 如果是平的,跳过该点即可
      if(right == 0) continue;
      
      if(left * right <= 0)
      {
      	ret++;
      }
      
      left = right;
      

      请添加图片描述


3.代码实现

int wiggleMaxLength(vector<int>& nums) 
{
    int n = nums.size();
    if(n < 2) return n;

    int ret = 0, left = 0;
    for(int i = 0; i < n - 1; i++)
    {
        int right = nums[i + 1] - nums[i];

        // 跳过平的地方
        if(right == 0)
        {
            continue;
        }

        // 寻找波峰/波谷
        if(left * right <= 0)
        {
            ret++;
        }

        left = right;
    }

    return ret + 1;
}

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

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

相关文章

Cisco Packet Tracer实验(一)

协议的概念 VLSM&#xff1a;可变长子网掩码&#xff08;Variable Length Subnet Mask&#xff09;没有传统意义上的A、B、C类网络&#xff0c;根据需求变化子网掩码的长度 CIDR无类别域间路由&#xff08;ClasslessInter-Domain Routing、CIDR&#xff09;把子网聚合在一起&…

多款可观测产品全面升级丨阿里云云原生 5 月产品月报

云原生月度动态 云原生是企业数字创新的最短路径。 《阿里云云原生每月动态》&#xff0c;从趋势热点、产品新功能、服务客户、开源与开发者动态等方面&#xff0c;为企业提供数字化的路径与指南。 趋势热点 &#x1f947; 阿里云云原生产品负责人李国强&#xff1a;推进可…

Eureka到Nacos迁移实战:解决配置冲突与启动异常

问题&#xff1a;Eureka到Nacos迁移实战&#xff1a;解决配置冲突与启动异常 在进行微服务架构升级&#xff0c;特别是注册中心从Eureka转向Nacos的过程中&#xff0c;我遇到了一个典型的技术挑战。目标是为了减少因配置变更导致的服务重启频率&#xff0c;我决定拥抱Nacos以其…

【PB案例学习笔记】-21小大写金额转换

写在前面 这是PB案例学习笔记系列文章的第21篇&#xff0c;该系列文章适合具有一定PB基础的读者。 通过一个个由浅入深的编程实战案例学习&#xff0c;提高编程技巧&#xff0c;以保证小伙伴们能应付公司的各种开发需求。 文章中设计到的源码&#xff0c;小凡都上传到了gite…

安装台式电脑网卡驱动

安装电脑网卡驱动 1. 概述2. 具体方法2.1 先确定主板型号2.2 详细操作步骤如下2.2.1 方法一2.2.2 方法二2.2 主流主板官网地址 结束语 1. 概述 遇到重装系统后、或者遇到网卡驱动出现问题没有网络时&#xff0c;当不知道怎么办时&#xff0c;以下的方法&#xff0c;可以作为一…

MMDetection实用工具详解(下):模型复杂度、基准测试

工具目录 四、模型复杂度应用展示结果解析 五、基准测试鲁棒性测试基准应用展示结果解析Testing gaussian_noise at severity 0Testing gaussian_noise at severity 2Aggregated results 遇到的tools自定义导包模块No Module Error错误解决思路 上期MMDetection内三个实用工具详…

2、给出五种并行计算机体系结构的名称,并分别画出其典型结构。

①并行向量处理机&#xff08;PVP&#xff09; ②对称多机系统&#xff08;SMP&#xff09; ③大规模并行处理机&#xff08;MPP&#xff09; ④分布式共享存储器多机系统&#xff08;DSM&#xff09; ⑤工作站机群&#xff08;COW&#xff09;

户外led显示屏如何选择?

在繁华的都市中&#xff0c;户外LED显示屏以其独特的魅力&#xff0c;成为传递信息、展示形象的重要工具。然而&#xff0c;面对市场上琳琅满目的产品&#xff0c;如何选择一款适合自己的户外LED显示屏呢&#xff1f;下面&#xff0c;我们将从屏幕类型、尺寸等具体参数出发&…

教程:A5000 GPU 上运行阿里最新开源大模型 Qwen2

这是我们新一篇关于大模型的文章&#xff0c;我们此前还讲过如何运行 LLama3 大模型。而这次&#xff0c;我们将使用 Ollama 运行阿里千问Qwen2:7b。要知道 Qwen2 可是目前最热门的开源大语言模型了&#xff0c;甚至在一些性能测试中比 LLama3 表现还突出。谁不想试试看呢&…

Golang | Leetcode Golang题解之第149题直线上最多的点数

题目&#xff1a; 题解&#xff1a; func maxPoints(points [][]int) (ans int) {n : len(points)if n < 2 {return n}for i, p : range points {if ans > n-i || ans > n/2 {break}cnt : map[int]int{}for _, q : range points[i1:] {x, y : p[0]-q[0], p[1]-q[1]if…

《NVIDIA-Jetson AGX Orin》移除或临时忽略 NVIDIA 仓库

阿丹&#xff1a; 开发的过程中出现了一些问题&#xff0c;在下载以及安装docker的时候&#xff0c;明明已经修改到了阿里云的国内镜像&#xff0c;但是还在下载的时候去访问了英伟达的下载仓库。在国内网络环境就会导致下载失败&#xff0c;网络不可达&#xff0c;本文章记录一…

现在Java行情不好可以转.net吗?

转向.NET开发可能是一个选择&#xff0c;但要注意以下几点。我这里有一套编程入门教程&#xff0c;不仅包含了详细的视频 讲解&#xff0c;项目实战。如果你渴望学习编程&#xff0c;不妨点个关注&#xff0c;给个评论222&#xff0c;私信22&#xff0c;我在后台发给你。 技术转…

好书推荐:生成式AI入门与AWS实战

这本书给LLM的爱好者者提供了完整的学习路线&#xff0c;让读者从使用大语言模型开始到剖析常用的技术概念&#xff0c;能够填补了机器学习爱好者从传统的文字处理到大语言模型的空白知识&#xff0c;包括显存计算优化&#xff0c;微调&#xff0c;RAG&#xff0c; 多模态&…

电池包断路单元DBU的预充电电阻应用案例

当电池组接触器闭合到电机和逆变器上时&#xff0c;逆变器电容器中会有电流涌入。这种非常高的电流至少可能会使接触器老化&#xff0c;并可能永久损坏接触器。 因此&#xff0c;当我们关闭电池组上的接触器时&#xff0c;我们分三个步骤执行此操作&#xff1a; 1.关闭主负极…

【机器学习】鸢尾花分类:机器学习领域经典入门项目实战

学习机器学习&#xff0c;就像学习任何新技能一样&#xff0c;最好的方法之一就是通过实战来巩固理论知识。鸢尾花分类项目是一个经典的入门项目&#xff0c;它不仅简单易懂&#xff0c;还能帮助我们掌握机器学习的基本步骤和方法。 鸢尾花数据集&#xff08;Iris Dataset&…

NLP入门——基于TF-IDF算法的应用

从json格式数据中抽出句子和标签 首先查看json格式的数据文件&#xff1a; :~/nlp/tnews/src$ less train.json可以看到json字符串表示一个对象&#xff0c;我们利用json.loads() 函数会将其转换为一个 Python 字典。docs python json #ext.py #encoding: utf-8import sys f…

计算机网络 —— 应用层(DNS域名系统)

计算机网络 —— 应用层&#xff08;DNS域名系统&#xff09; 什么是DNS域名的层次结构域名分类 域名服务器的分类域名解析方式递归查询&#xff08;Recursive Query&#xff09;迭代查询&#xff08;Iterative Query&#xff09;域名的高速缓存 我们今天来看DNS域名系统 什么…

Qt调用第三方库的通用方式(静态链接库.a或.lib、动态链接库.dll)

目录 一、前提 二、如何引用静态链接库 三、如何引用动态链接库 四、示例代码资源 在开发项目中经常会存在需要调用第三方库的时候&#xff0c;对于Qt如何来调用第三方库&#xff0c;为了方便自己特意记录下详细过程。 一、前提 1. window 10操作系统 2. 已安装了Qt6.7.…

[大模型]Phi-3-mini-4k-instruct langchain 接入

环境准备 在 autodl 平台中租赁一个 3090 等 24G 显存的显卡机器&#xff0c;如下图所示镜像选择 PyTorch–>2.0.0–>3.8(ubuntu20.04)–>11.8 。 接下来打开刚刚租用服务器的 JupyterLab&#xff0c;并且打开其中的终端开始环境配置、模型下载和运行演示。 创建工作…

10大wordpress外贸主题

手动工具wordpress外贸模板 适合生产套筒扳、管钳、工具箱、斧子、锤子、防爆工具、螺丝刀、扳手等手动工具的厂家。 https://www.jianzhanpress.com/?p4806 Invisible Trade WP外贸网站模板 WordPress Invisible Trade外贸网站模板&#xff0c;做进出口贸易公司官网的word…