贪心算法三道经典题(买卖股票,分发饼干)

news2024/10/1 7:44:27

贪心算法
贪心的本质是选择每一阶段的局部最优,从而达到全局最优。
步骤:

  • 将问题分解为若干个子问题
  • 找出适合的贪心策略
  • 求解每一个子问题的最优解
  • 将局部最优解堆叠成全局最优解

分发饼干

LeetCode原题
在这里插入图片描述

找满足孩子数量的最大值———最优解问题
什么时候最优?孩子都被分配最小的符合条件的饼干
所以把问题拆解成:找到目前未被满足的需求最小的孩子,分配他最小的符合要求的饼干
使数组有序再遍历即可

class Solution {
    public int findContentChildren(int[] g, int[] s) {
        Arrays.sort(g);
        Arrays.sort(s);
         int m = g.length, n = s.length;
        int count = 0;
        for(int i =0,j=0;i<m&&j<n;i++,j++){
            while(j<n&&g[i]>s[j]){
                j++;
            }
            if(j<n){
                count++;
            }
        }
        return count;
    }
}

买卖股票的最佳时机

LeetCode原题
在这里插入图片描述

分析题目:
找最大利润————最优解问题
什么时候利润最大?买入价格和未来最高价格的差值最大时,利润最大
分解问题:找到每一天买入价格和未来最高价格的差值,比较即可

class Solution {
    public int maxProfit(int[] prices) {
        int maxprofit = 0;
        for(int i =0;i<prices.length;i++){
            int price = prices[i];
            int maxprice = prices[i];
            for(int j =i+1;j<prices.length;j++){
                if(maxprice<prices[j]){
                    maxprice = prices[j];
                }
            }
            int profit =maxprice-price;
            if(maxprofit<profit){
                maxprofit = profit;
            }
        }
        return maxprofit;
    }
}

上述方法时间复杂度较高,如何简化?
简化用一个变量遍历过的价格的最小值,因为只能买卖一次,所以无论如何,从最低点买都是利润最高的

public class Solution {
    public int maxProfit(int prices[]) {
        int minprice = prices[0];
        int maxprofit = 0;
        for (int i = 0; i < prices.length; i++) {
            if (prices[i] < minprice) {
                minprice = prices[i];
            } else if (prices[i] - minprice > maxprofit) {
                maxprofit = prices[i] - minprice;
            }
        }
        return maxprofit;
    }
}

买卖股票的最佳时机 II

LeetCode原题
在这里插入图片描述

为什么能够多次买入卖出,代码反而更简单了?
只需要考虑前一天和后一天的价格差即可
假设i天买入,后两天价格都上升了,i+1天卖了之后,i+1天再原价买入即可————只要下一天价格上升,就可以买入再买

class Solution {
    public int maxProfit(int[] prices) {
        int ans = 0;
        int n = prices.length;
        for (int i = 1; i < n; ++i) {
            ans += Math.max(0, prices[i] - prices[i - 1]);
        }
        return ans;
    }
}

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

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

相关文章

数据同步大冒险:PostgreSQL到MySQL的奇妙之旅

引言&#xff1a;一场跨数据库的浪漫邂逅 &#x1f491; 在数据的世界里&#xff0c;不同数据库系统就像是来自不同星球的恋人&#xff0c;它们各自拥有独特的魅力&#xff0c;但偶尔也会渴望一场跨越界限的亲密接触。今天&#xff0c;我们就来见证一场PostgreSQL与MySQL之间的…

初赛试题-2022年CSP-J3

先言 本次试卷 完善程序 三、完善程序&#xff08;每题3分&#xff0c;共30分&#xff09; &#xff08;1&#xff09; 【答案】 A B C D A &#xff08;2&#xff09; 【答案】 A B C D A

探索用于小占用关键词检测的TinyML框架:一个简明概述

目录 摘要 第一部分&#xff1a;引言 第二部分&#xff1a;部署TinyML的常见挑战 第三部分&#xff1a;SF-KWS的不同方法 A. 网络架构&#xff08;Network Architecture&#xff09; B. 学习技术&#xff08;Learning Techniques&#xff09; C. 模型压缩&#xff08;Mo…

最新黑名单查询录入系统PHP网站源码

源码介绍&#xff1a; 最新黑名单查询录入系统PHP网站源码 前端html 后端layui 操作部分都采用API接口的方式实线 集结了layui表格的多数据操作&#xff0c;添加&#xff0c;批量删除&#xff0c;分页&#xff0c;单项删除 后台数据修改采用绑定参数的形式来进行修改可以很…

C语言函数递归(含扫雷进阶思路)

文章目录 一、什么是递归二、递归的使用思路和限制条件1.递归的使用思路2.递归的限制条件 三、递归的举例举例1&#xff1a;求n的阶乘2.举例2&#xff1a;顺序打印⼀个整数的每⼀位 四、递归与迭代对比五、递归与迭代对比举例七、扫雷进阶思路 一、什么是递归 递归是学习C语⾔函…

暄桐教室分享“闲人”指南

一种理想的生活状态&#xff0c;叫“做个闲人”&#xff0c;如苏东坡《行香子述怀》那般&#xff0c;“对一张琴&#xff0c;一壶酒&#xff0c;一溪云”&#xff0c;放下纷扰&#xff0c;好自在。然而&#xff0c;闲并不是简单的无事可做&#xff0c;让自己时光充沛、能量聚集…

MacOS使用FileZilla通过ssh密钥文件连接远程服务器(已解决)

需求描述 mac电脑,使用filezilla通过FTP连接远程服务器,使用ssh密钥文件代替密码。 版本信息 MacOS:Sonoma 14.5 M3芯片 FileZilla:3.66.5 在这里插入图片描述 连接 1. 创建站点 打开filezilla工具,右上角选择“文件 -> 站点管理器”,打开站点管理器弹窗。 2.…

vue 动态替换父组件

替换父组件&#xff1f;&#xff1f; 什么鬼&#xff1f;&#xff1f;&#xff1f; 这个场景的确很少见&#xff01;&#xff01;不过我们要说的的确是要替换父组件&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 就是子组件内容不变但是父组件变…

【HuggingFace Transformers】LlamaDecoderLayer源码解析

LlamaDecoderLayer源码解析 1. LlamaDecoderLayer 介绍2. LlamaDecoderLayer 类源码解析 1. LlamaDecoderLayer 介绍 LlamaDecoderLayer 是 LLaMA 模型中的一个关键组件&#xff0c;它结合了自注意力机制、全连接层和残差连接&#xff0c;以及对输入数据的归一化。主要流程为&…

SpringCloud之一IDEA导入已有微服务项目并启动服务

一|、导入已有微服务项目 启动idea&#xff0c;file --> open&#xff0c;选择项目根目录&#xff1b;点击屏幕右侧maven projects按钮 -->点那个绿&#xff0c;如果屏幕右侧没有maven projects按钮&#xff0c;点击Help->Find Action&#xff0c;输入maven&#xff…

算法-存在重复元素(219)

这道题一眼看过去暴力&#xff0c;两层循环&#xff0c;找到相等的数字&#xff0c;然后判断一下就行&#xff0c;但是这样的话不符合哈希表使用原则。这道题同样利用了hash表键值配对的规则。 class Solution {public boolean containsNearbyDuplicate(int[] nums, int k) {M…

C语言 | Leetcode C语言题解之第382题链表随机节点

题目&#xff1a; 题解&#xff1a; typedef struct {struct ListNode * head; } Solution;Solution* solutionCreate(struct ListNode* head) {Solution * obj (Solution *)malloc(sizeof(Solution));assert(obj ! NULL);obj->head head;return obj; }int solutionGetRa…

keil中内存的存储规律

keil中内存的存储规律 keil中内存的存储规律 文章目录 keil中内存的存储规律keil中内存的存储规律 keil中内存的存储规律 #include <stdlib.h> #include "gd32f30x.h" #include "led_drv.h" #include "delay.h" #include "key_drv.…

GIT 下载安装使用教程

一. GIT下载 git下载地址https://git-scm.com/downloads 二. git安装 1. 许可声明 看完许可声明&#xff0c;点击Next就好了 2. 选择安装路径 默认为C盘&#xff0c;可以修改&#xff0c;这里修改为D盘&#xff0c;点击Next 3. 组件选择 勾选添加在桌面上&#xff0c;就是…

android gradle特别慢

gradle下载慢 修改gradle-wrapper.properties 替换https://services.gradle.org/distributions为https://mirrors.cloud.tencent.com/gradle distributionBaseGRADLE_USER_HOME distributionPathwrapper/dists distributionUrlhttps\://mirrors.cloud.tencent.com/gradle/g…

jenkins发布文件到远程服务器

jenkins安装 安装教程 后台启动脚本 创建脚本&#xff1a;start_jenkins.sh ls for pid in $(ps -ef|grep jenkins.war|grep -v grep|cut -c 10-16); doecho $pid;kill -9 $pid; done;nohup java -Djava.awt.headlesstrue -jar /usr/local/jenkins/jenkins.war --webroot/…

Linux入门攻坚——30、sudo、vsftpd

su&#xff1a;Switch User&#xff0c;即切换用户 su [-l user] -c ‘COMMAND’ 如&#xff1a;su -l root -c ‘COMMAND’ 如果没有指定-l user&#xff0c;则默认是root sudo&#xff1a;可以让某个用户不需要拥有管理员的密码&#xff0c;而可以执行管理员的权限。 需…

RabbitMQ练习(Topics)

1、RabbitMQ教程 《RabbitMQ Tutorials》https://www.rabbitmq.com/tutorials 2、环境准备 参考&#xff1a;《RabbitMQ练习&#xff08;Hello World&#xff09;》和《RabbitMQ练习&#xff08;Work Queues&#xff09;》。 确保RabbitMQ、Sender、Receiver、Receiver2容器…

云原生向量数据库 PieCloudVector 助力多模态大模型 AI 应用

全球 AGI&#xff08;人工通用智能&#xff09;市场快速增长的背景下&#xff0c;企业应用成为推动这一领域发展的主要力量&#xff0c;企业如何选择合适的技术来支撑其智能化转型显得尤为重要。在墨天轮《数据库技术如何增强 AI 大模型&#xff1f;》数据库沙龙活动中&#xf…

C语言典型例题55

《C程序设计教程&#xff08;第四版&#xff09;——谭浩强》 题目&#xff1a; 例题4.7 兔子的繁殖。这是一个有趣的古典问题&#xff1a;有一对兔子&#xff0c;从出生后的第3个月开始起每个月都生一对兔子。小兔子长到第3个月又生一对兔子。假设所有兔子都不死&#xff0c;…