贪心算法

2023-10-26

贪心算法

不需要考虑整个解空间所有解,只考虑当前的最优解。不能回溯,也不记录每一步的解。

习题

1.买卖股票的最佳时机

给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。

你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。

返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。

示例 1:

输入:[7,1,5,3,6,4]
输出:5
解释:在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。
注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格;同时,你不能在买入前卖出股票。
示例 2:

输入:prices = [7,6,4,3,1]
输出:0
解释:在这种情况下, 没有交易完成, 所以最大利润为 0。

提示:

1 <= prices.length <= 105
0 <= prices[i] <= 104

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

题解

找出数组中最小的元素,如果,不是最小元素,则将这个值减去之前所找到的最小元素,与已知的最大的利益相比,如果较大,则更新最大利益值。
比较隐晦的一个逻辑是,minPrice出现在pricse[i]之前,即有时间顺序。与其等价的说话是,求数组中某一元素之后的元素,与此元素差值最大的值。

 public int maxProfit(int[] prices) {
        int minPrice = Integer.MAX_VALUE;
        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

给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。

设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。

注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。

示例 1:

输入: [7,1,5,3,6,4]
输出: 7
解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。
随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票价格 = 6)的时候卖出, 这笔交易所能获得利润 = 6-3 = 3 。
示例 2:

输入: [1,2,3,4,5]
输出: 4
解释: 在第 1 天(股票价格 = 1)的时候买入,在第 5 天 (股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。
注意你不能在第 1 天和第 2 天接连购买股票,之后再将它们卖出。
因为这样属于同时参与了多笔交易,你必须在再次购买前出售掉之前的股票。
示例 3:

输入: [7,6,4,3,1]
输出: 0
解释: 在这种情况下, 没有交易完成, 所以最大利润为 0。

提示:

1 <= prices.length <= 3 * 10 ^ 4
0 <= prices[i] <= 10 ^ 4

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

题解

1.可以多次交易
2.只要后一天比前一天要高,则前一天买入,后一天卖出。

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

        return result;

    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

贪心算法 的相关文章

随机推荐

  • Python+OpenCV3简单手势识别

    文章目录 安装相关库 原理简述 代码 效果实现 今天教大家一个有趣的玩法 如何利用Python opencv3实现简单的手势识别 当然网上也有相关教程 但绝大多数给出的代码拿来之后你是不能直接用的 这对于拿来主义的同学来说简直太 禽兽 了
  • python rpy2_Python&R语言-rpy2使用示例

    前言 Python编程灵活方便 R的模型方法众多 如何将两者结合起来 发挥更大的作用 值得探索 Python可以直接调用R的函数 R是开源项目 肯定会有一些第三方库实现Python与R互通 需要在python中调用R 实在是一种无奈的选择
  • vue3+TSX+element-plus(DateTimePicker)做一个时间范围选择器

    element plus包括element ui支持时间范围选择 把type指定成datetimerange就行了 但是它不支持单个选择 也许unlink panels这个配置有用 但我是用TSX写的 传了个true进去没用 怎么试都不行
  • 20张图带你了解JVM运行时数据区(上)

    我们的JVM系列已经断更好几天了 小伙伴们在后台疯狂私信阿Q 想看后续内容 今天它来了 相信大家在上篇文章中已经对类加载子系统有了清晰的认识 接下来就让我们来揭开 运行时数据区 的神秘面纱吧 运行时数据区总览 内存是非常重要的系统资源 是硬
  • GC overhead limit exceeded问题

    Java运行时环境内置了 垃圾收集 GC 模块 上一代的很多编程语言中并没有自动内存回收机制 需要程序员手工编写代码来进行内存分配和释放 以重复利用堆内存 在Java程序中 只需要关心内存分配就行 如果某块内存不再使用 垃圾收集 Garba
  • vue watermark水印添加

    vue 水印实现 Vue项目在页面添加水印功能 不允许操作dom关闭水印 1 添加watermark dom插件 npm i watermark dom save 引用 watermark dom import watermark from
  • lsqcurvefit函数的基本用法

    本文讲解lsqcurvefit函数的基本用法 一 lsqcurvefit函数的简单使用格式 x lsqcurvefit fun x0 xdata ydata x resnorm lsqcurvefit fun x0 xdata ydata
  • 线程安全性的基本概念

    线程安全性 我们总是说要编写线程安全的代码 有时候也会讨论某个类是不是线程安全的 那到底什么是线程安全性呢 网上有很多说法 可以被多个线程调用 并且线程之间不会出现错误的交互 多个线程调用时 不需要做额外的动作等等 但这话 明明什么都说了
  • 力扣刷题-128.最长连续序列、并查集

    一 并查集 顾名思义 并 就是合并 查 就是查找 集 就是集合 并查集是一种树形的数据结构 支持以下两种操作 查找 确定某个元素处于哪个子集 合并 将两个子集合并成一个集合 初始化 集合就是一些具有相同特征的元素构成的圈子 然后用其中某个元
  • vue3中定义的对象再次赋值,页面不会自动更新解决方法

    第一种方法 将reactive换成ref 即可实现页面随时刷新 export default components HelloWorld name App setup let person ref const getPerson data
  • Umi 内使用mock

    在mock文件夹下创建stu js 在mock文件夹下创建stu js 代码如下 利用mock js库 增强mock数据能力 首先先安装 yarn add mockjs 或者 npm i mockjs
  • 【整理九】

    目录 1 说说你对递归的理解 封装一个方法用递归实现树形结构封装 2 Link和 import有什么区别 3 什么是FOUC 如何避免 4 说说你对预编译器的理解 5 shouldComponentUpdate 的作用 6 概述下 Reac
  • 计算机2.0培训心得,2020信息技术2.0培训心得

    时代的车轮滚滚 把我们带到信息高速路 信息技术迅猛发展令我们猝不及防 也惊喜万分 它渗透到社会生活角角落落 校园更是如此 传统教育教学模式 教学方式和教学手段等统统被打破 我们甚至措手不及 今年 我幸运参加2020年年底为期7天的中小学信息
  • Typora自定义命令上传图片到服务器

    Typora自定义命令上传图片到服务器 缘由 因为平时喜欢用Typora写文档 markdown也比较方便复制到各个网站上去展示 但是markdown复制的文件之前一直都是保存在本地 md文件复制给别人或者复制到其他博客上会导致图片找不到或
  • 6.9行为型---访问者模式

    在现实生活中 有些集合对象中存在多种不同的元素 且每种元素也存在多种不同的访问者和处理方式 例如 公园中存在多个景点 也存在多个游客 不同的游客对同一个景点的评价可能不同 医院医生开的处方单中包含多种药元素 査看它的划价员和药房工作人员对它
  • datatables完整的增删改查

    1 需要指定datatables的ID 1
  • AVL树的旋转

    平衡二叉树在进行插入操作的时候可能出现不平衡的情况 AVL树即是一种自平衡的二叉树 它通过旋转不平衡的节点来使二叉树重新保持平衡 并且查找 插入和删除操作在平均和最坏情况下时间复杂度都是O log n AVL树的旋转一共有四种情形 注意所有
  • QT console工程关于控制台的弹出

    创建了一个qt console application工程 作为keil的一脚本工具使用 但是在keil编译完成后总是弹出qt控制台 且keil编译按钮显示完成不了 只有将控制台关闭后 keil编译按钮才显示编译完成 影响使用效果 于是想关
  • OD机试题

    OD机考原题 1 恢复数字序列 对于一个连续正整数组成的序列 可以将其拼接成一个字符串 再将字符串里的部分字符打乱顺序 如序列8 9 10 11 12 拼接成的字符串为89101112 打乱一部分字符后得到90811211 原来的正整数10
  • 贪心算法

    贪心算法 不需要考虑整个解空间所有解 只考虑当前的最优解 不能回溯 也不记录每一步的解 习题 1 买卖股票的最佳时机 给定一个数组 prices 它的第 i 个元素 prices i 表示一支给定股票第 i 天的价格 你只能选择 某一天 买