当前位置: 首页 > article >正文

70-76-堆、贪心算法

LeetCode 热题 100

文章目录

  • LeetCode 热题 100
    • 70. 中等-数组中的第K个最大元素
    • 71. 中等-前K个高频元素
    • 72. 困难-数据流中的中位数
  • 贪心算法
    • 73. 简单-买卖股票的最佳时机
    • 74. 中等-跳跃游戏
    • 75. 中等-跳跃游戏II
    • 76. 中等-划分字母区间

本文存储我刷题的笔记。


70. 中等-数组中的第K个最大元素

71. 中等-前K个高频元素

72. 困难-数据流中的中位数

贪心算法

73. 简单-买卖股票的最佳时机

我的思路

  • 思路:从左到右遍历每个元素,每次都更新最小值和最大值,并不断更新最大利润。
  • 时间复杂度: O ( n ) O(n) O(n)
  • 空间复杂度: O ( 1 ) O(1) O(1)
  • 时间104ms(59.40%),内存91.48MB(53.42%)。
class Solution {
public:
    int maxProfit(vector<int>& prices) {
        // 排除特殊情况:只有一天
        int len = prices.size();
        if(len<=1){
            return 0;
        }

        // 遍历所有所有天数
        int p_max{prices[0]}, p_min{prices[0]}, profit{0};
        for(int i=1; i<len; i++){
            p_min = std::min(p_min, prices[i]); // 更新下限
            p_max = std::max(p_min, prices[i]); // 更新当前下限后的上限
            profit = std::max(profit, p_max-p_min); // 更新最大利润
        }
        return profit;
    }
};

官方思路一:一次遍历

  • 思路:保存以往的最低点,计算今天能获利多少,遍历一次即可完成。

  • 时间复杂度: O ( n ) O(n) O(n)

  • 空间复杂度: O ( 1 ) O(1) O(1)

  • 时间84ms(97.06%),内存91.39MB(77.65%)。

class Solution {
public:
    int maxProfit(vector<int>& prices) {
        int minprice = prices[0]; // 以往的最低点
        int maxprofit = 0;        // 最大利润
        // 遍历每一个元素
        for (int price: prices) {
            maxprofit = max(maxprofit, price - minprice); // 更新最大利润
            minprice = min(price, minprice);              // 更新以往最低点
        }
        return maxprofit;
    }
};

74. 中等-跳跃游戏

75. 中等-跳跃游戏II

76. 中等-划分字母区间

我的思路

  • 思路

  • 时间??ms(??%),内存??MB(??%)。


官方思路:

  • 思路

  • 时间??ms(??%),内存??MB(??%)。



http://www.kler.cn/a/146962.html

相关文章:

  • 在Qt(以及C++)中, 和 * 是两个至关重要的符号--【雨露均沾】
  • DHTMLX-gantt组件显示不同的颜色
  • vscode文件重定向输入输出(竞赛向)
  • 【微信小程序】访客管理
  • Streamlit:快速搭建数据科学应用的利器
  • 学了Arcgis的水文分析——捕捉倾泻点,河流提取与河网分级,3D图层转要素失败的解决方法,测量学综合实习网站存着
  • java设计模式学习之【单例模式】
  • Spark升级中对log4j中的一些思考
  • 移动安全威胁:今天和明天的危险
  • C++类与对象(5)—流运算符重载、const、取地址
  • 《微信小程序从入门到精通》---笔记1
  • 【Github】git安装
  • 【Python】使用execute(sql)执行insert之后没有插入数据
  • 贪吃蛇小游戏基本简单布局
  • Clion+Ubuntu(WSL)+MySQL8.0开发环境搭建
  • 30天精通Nodejs--第十二天:ioredis
  • 华为OD机试 - 分月饼(Java JS Python C)
  • Vue常见的实现tab切换的两种方法
  • python大写中文转阿拉伯数字
  • C 中的指针 - 函数
  • Java游戏 王者荣耀
  • 【玩转client-go】使用client-go从POD拷贝文件出来
  • Android 13.0 开机过滤部分通知声音(莫名其妙的通知声音)
  • 蓝桥杯官网算法赛(蓝桥小课堂)
  • 做直播服务器要什么样的配置呢?
  • C语言做一个恶作剧关机程序