代码随想录 - Day37 - 贪心算法

2023-11-07

代码随想录 - Day37 - 贪心算法

376. 摆动序列

  1. 排除只有一个数的情况
  2. 把差值全部求出来放到dif里,在此过程中顺便去掉差值为0的情况。
  3. 如果dif为空,说明里面所有差值为0,那么最长摆动序列只能是1,直接返回
  4. 如果dif不为空,把dif[0]放到result
  5. 根据result的最后一个值,判断要不要把接下来的dif[i]放进去(按照正负交替的顺序)
  6. 最终得到的result里的值全都是差值,为了返回最长摆动序列,需要给len(result)1

这道题不同情况有点多,错了三次才改出最终代码

class Solution:
    def wiggleMaxLength(self, nums: List[int]) -> int:
        if len(nums) == 1:
            return 1
        dif = []
        for i in range(1, len(nums)):
            t = nums[i] - nums[i - 1]
            if t != 0:
                dif.append(t)
        if dif == []:
            return 1
        else:
            result = [dif[0]]
        for i in range(1, len(dif)):
            if result[len(result) - 1] > 0 and dif[i] < 0:
                result.append(dif[i])
            elif result[len(result) - 1] < 0 and dif[i] > 0:
                result.append(dif[i])
        return len(result) + 1

看了一下题解,他是直接在遍历的过程中求差值+比较,我是先统一求差值,再进行比较。
第二种方法是动态规划,目前暂时看不懂,后面做到动态规划题再说

53. 最大子数组和

本来想用数组记录具有最大和的连续子数组,后面发现遇到只有负数的情况就行不通。
还是得用这个方法:

class Solution:
    def maxSubArray(self, nums: List[int]) -> int:
        maxSum = float('-inf')
        cnt = 0
        for i in range(len(nums)):
            cnt += nums[i]
            if cnt > maxSum:
                maxSum = cnt
            if cnt <= 0:
                cnt = 0
        return maxSum

122.买卖股票的最佳时机 II

关键点在于分解利润。
假如第 0 天买入,第 3 天卖出,那么利润为:prices[3] - prices[0]
相当于(prices[3] - prices[2]) + (prices[2] - prices[1]) + (prices[1] - prices[0])
此时就是把利润分解为每天为单位的维度,而不是从 0 天到第 3 天整体去考虑!
那么根据 prices 可以得到每天的利润序列:(prices[i] - prices[i - 1]).....(prices[1] - prices[0])
最后将所有的正利润加起来就可以了。

class Solution:
    def maxProfit(self, prices: List[int]) -> int:
        liRun = []
        for i in range(1, len(prices)):
            t = prices[i] - prices[i - 1]
            if t > 0:
                liRun.append(t)
        return sum(liRun)        

思维要灵活啊,不要傻傻的想着先找个买入点再找个卖出点再循环往复。

55. 跳跃游戏

不拘泥每次跳几步,而是看覆盖范围,覆盖范围内一定是可以跳过来的。
要注意,数组中每个元素代表的是从该位置可以跳跃的的最大长度,而不是必须跳这个长度。

class Solution:
    def canJump(self, nums: List[int]) -> bool:
        cover = 0
        if len(nums) == 1:
            return True
        i = 0
        while i <= cover:
            cover = max(i + nums[i], cover)
            if cover >= len(nums) - 1:
                return True
            i += 1
        return False

for循环的写法

class Solution:
    def canJump(self, nums: List[int]) -> bool:
        cover = 0
        if len(nums) == 1: return True
        for i in range(len(nums)):
            if i <= cover:
                cover = max(i + nums[i], cover)
                if cover >= len(nums) - 1: return True
        return False

暂时到这,等会看看go 下午去看看宣讲会,晚上有空再看别的题,没空就这样了
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

代码随想录 - Day37 - 贪心算法 的相关文章

  • MonoSQL--支持SQL,让DynamoDB更强大

    MonoSQL from MonographDB MonoSQL是成章数据打造的一款基于DynamoDB的分布式SQL数据库 受益于DynamoDB的Serverless架构和任何数据规模下的查询个位数延时保障 MonoSQL在支持SQL生
  • PCB板上字母的含义

    阅读PCB板子文件 发现板子上字母的大致符合表中规律 PCB板上 字母 数字 如R16 C16 表示的含义 一般数字表示出现的次数 字母表示的意义如下 字母 含义 R 电阻 C 电容 K 继电器 L 电感 U 整流器 字母的意义并非始终与表
  • 问题记录setStyleSheet:Qt样式表频繁设置导致CPU占用过高问题

    一 问题 APP控件 QWidget 主窗口 背景利用setStyleSheet设置 同时重写paintEvent事件 QWigdet的paintEvent默认为空 void mainWidget paintEvent QPaintEven
  • Java数组转Json数组

    package com cnic test coding import com alibaba fastjson JSONArray public class ArrToJson public static void main String

随机推荐

  • Java中为什么要重写hashCode方法和equals方法?重写了equals方法为什么还要重写hashCode方法? 啊~~终于明白了

    在我们开发中 可能经常听到重写hashCode方法和equals方法 这是为什么呢 为了更容易通俗易懂 来个小故事缓解一下激动的心情 打个比方 一个名叫张三的人去住酒店 在前台登记完名字就去了99层100号房间 此时警察来前台找叫张三的这个
  • 查询数据库所占空间大小

    目录 统计数据库整体所占大小 统计数据库中各表所占大小 统计数据库整体所占大小 select table schema as 数据库 sum table rows as 记录数 sum truncate data length 1024 1
  • 华为19级专家10年心血终成百页负载均衡高并发网关设计实战文档

    负载均衡 LoadBalance 的字面意思是将工作负载分担到多个工作单元上进行执行 它建立在现有网络结构之上 是构建分布式服务 大型网络应用的关键组件 近十几年来 负载均衡技术层出不穷 令人眼花缭乱 如果问身边的技术人员什么是负载均衡 我
  • Vjava学习笔记之(VirtualMachine 内存(总容量和已使用))

    源代码 package com vmware client import com vmware util Session import com vmware vim25 HostListSummary import com vmware v
  • 11G RAC 中 OCR 及Voting Disk 相关操作

    一 启动oracle clusterware 先决条件 Oracle High Availability Services daemon OHASD 运行在所有集群节点上 1 启动整个Oracle Clusterware stack crs
  • windows下git

    下载gitGit for Windows Windows安装git图文教程 喵代王 香菜的博客 CSDN博客 windows安装git 创建文件夹 右键 git bash here 同mac使用
  • 基于Spring Boot的ERP仓储管理信息系统设计与实现毕业设计源码150958

    基于Spring Boot的ERP仓储管理信息系统设计与实现 摘 要 科技进步的飞速发展引起人们日常生活的巨大变化 电子信息技术的飞速发展使得电子信息技术的各个领域的应用水平得到普及和应用 信息时代的到来已成为不可阻挡的时尚潮流 人类发展的
  • 如何实现一个IO口读取多个设备信息

    前言 1 今天遇到一个有意思的问题一个IO口如何读取多个电机的堵转问题 之后他就发了一张图片 2 看到这个问题 之前先说一个简单的 我们如何实现一个IO读取多个按键 了解了这个之后 对于多个电机堵转就很好理解了 如何实现一个IO对多个按键读
  • 直方图均衡化原理

    原文 http www cnblogs com tianyalu p 5687782 html 直方图均衡化原理 直方图均衡化的作用是图像增强 有两个问题比较难懂 一是为什么要选用累积分布函数 二是为什么使用累积分布函数处理后像素值会均匀分
  • 从零开始的Java开发 笔记目录(跑路了)

    写在前面 不全 学习资料来源于网络 已经跑路了 文章目录 阶段1 Java零基础入门 第1周 环境搭建与语法入门 第2周 Java语法之循环 数组与方法 第3周 面向对象之封装与继承 第4周 面向对象之单例模式与多态 第5周 常用工具类 上
  • linux c++遍历文件夹下所有文件,C++ 遍历目录下文件

    function 遍历目录下所有文件 返回文件总数 子文件夹总数 修改一下可以获得全部文件名等 include stdlib h include direct h include string h include io h include
  • 对OOD/OOP有较深的理解

    最近 经常有很多人在求职的时候遇到这样一个问题 对OOD OOP有较深的理解 那OOD OOP又是什么 那今天就来讲讲它们都是些什么 又如何去回答 1 OOA Object oriented analysis 面向对象分析 面向对象分析方法
  • 一款带ai基因的向导般生成ppt的神奇网站

    只要按要求填写每一页的内容 即可生成一套像模像样的ppt 无需排版 模板众多 以后ppt不需要人写了 哈哈 1 登录 https app slidebean com 2 注册 3 新建 4 模板选择 5 填写 以airbnb为例 6 结果
  • 【微信读书每日一答辅助小程序】使用python对每日一答问题进行识别,并将结果保存到剪贴板以便搜索。

    目录标题 1 环境准备 2 获取屏幕位置 3 指定区域屏幕截图 4 文字识别 5 按键识别并保存到剪贴板 在腾讯收购阅文之后 微信读书的无限卡已经不能免费看书了 这时白嫖微信读书每日一答的书币成了不错的选择 严重偏科又手速垃圾的我在等级升高
  • Win10 解决docker一直docker desktop starting进不去的问题

    这里写自定义目录标题 为什么出现这个问题 方法1 方法2 方法3 解决我的问题 后续计划 为什么出现这个问题 似乎是因为上次没有完全关闭 而是直接关闭电脑导致的 目前有三种方法 后续应该有更多 我这边方法1 2都没有解决我的问题 方法3解决
  • Rxjs 操作符实践指南

    操作符实战 1 工具方法型 count 统计总数 import range from rxjs import count from rxjs operators const numbers range 1 7 const result nu
  • python中16mod7_mod_python模块安装

    两 mod python 1 性能 使用mod python的主要优势在于比传统CGI更高的性能 一个測试 使用在Pentium 1 2GHz的机器上执行Red Hat Linux 7 3 使用4种类型的脚本 基于标准的CGI导入模块 以典
  • Android Glide加载图片圆角效果与ImageView的ScaleType冲突问题

    在imageVIew显示图片的时候一般是使用 android scaleType centerCrop 来让图片不被变形显示 但是如果现在用Glide来加载图片并给它转化出一个圆角 transform new GlideRoundTrans
  • 【导航】ESP32-C3 入门教程目录 【快速跳转】

    本文是 矜辰所致 的ESP32 C3 专栏的内容导航 结合自己的学习应用过程的总结记录 ESP32 C3入门教程 前言 一 环境篇 二 硬件篇 三 基础篇 四 Wi Fi篇 五 蓝牙篇 六 应用篇 前言 本系列教程以实际应用为目的 能够使得
  • 代码随想录 - Day37 - 贪心算法

    代码随想录 Day37 贪心算法 376 摆动序列 排除只有一个数的情况 把差值全部求出来放到dif里 在此过程中顺便去掉差值为0的情况 如果dif为空 说明里面所有差值为0 那么最长摆动序列只能是1 直接返回 如果dif不为空 把dif