代码随想录27期|Pthon|Day31|贪心算法|理论基础|455.分发饼干|376. 摆动序列|53. 最大子序和

理论基础

首先,贪心算法基本靠“做题感觉”,所以没有规范的总结和做题技巧,只能说见到过之后还能想起来。

一般情况可以看成是对于一个大的问题的子问题的局部最优的求解,然后可以推导出全局的最优。

这个过程没有证明,只能说在“认为没有反例”的情况下“试一试”。

 455. 分发饼干

从大饼干开始:先喂饱大的,然后再喂饱小的

都从最大的值开始遍历,for控制胃口,idx指向饼干,当且仅当找到小于饼干的胃口的时候idx往前移动,否则持续找更小的胃口。

从小饼干开始:先找到能满足第一个人的饼干

都从小的开始遍历,for控制饼干,idx指向胃口,找到一个满足的胃口之后idx再向后移动。

class Solution(object):def findContentChildren(self, g, s):""":type g: List[int]:type s: List[int]:rtype: int"""if len(g) == 0 or len(s) == 0:return 0g.sort()s.sort()# 小饼干开始idx = 0for i in range(len(s)):if idx < len(g) and s[i] >= g[idx]:idx += 1return idx# 大饼干开始num_fed = 0idx = len(s)  - 1# 固定饼干idx找合适的胃口for i in range(len(g)-1, -1, -1):if g[i] <= s[idx] and idx >= 0:num_fed += 1idx -= 1return num_fed

376. 摆动序列

本题需要考虑的是多种情况的平坡(也就是差值不发生变化的时候)。

基本想法是比较前后两个差值和0的大小:

(1)第一种需要考虑差值为0,也就是遇到平坡的时候;
(2)另外一种是在上升的时候遇到平坡。

所以选择双指针的方法,使用一个cur和一个pre分别指向当前和之前的差值,和0进行比较。当且仅当差值出现波动(也就是更新了res)的时候更新pre的值。

class Solution(object):def wiggleMaxLength(self, nums):""":type nums: List[int]:rtype: int"""res = 1cur_diff = 0pre_diff = 0if len(nums) <= 1:return len(nums)for i in range(len(nums) - 1):cur_diff = nums[i + 1] - nums[i]if (cur_diff > 0 and pre_diff <= 0) or (cur_diff < 0 and pre_diff >= 0):res += 1pre_diff = cur_diff  # 当且仅当res更新的时候才让pre向前走return res

53. 最大子数组和

思路:遍历 nums,从头开始用 count 累积,如果 count 一旦加上 nums[i]变为负数,那么就应该从 nums[i+1]开始从 0 累积 count 了,因为已经变为负数的 count,只会拖累总和。使用res记录当前最大值即可。

class Solution(object):def maxSubArray(self, nums):""":type nums: List[int]:rtype: int"""res = - float('inf')count = 0for i in range(len(nums)):count += nums[i]if count > res:res = countif count <= 0:count = 0return res

有一个误区:是遇到负数就从头开始还是和为负数就从头开始?

比如,4,-1,3这个序列,4 - 1 = 3是正数,对于后面的3起到增益的作用,所以应该被保留,但是由于最大值一直都存在res里面,所以即使3比4要小,对于结果并不会产生影响。

第31天完结!!🎉

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python小细节之Gui图形化界面库的对比和选择(一分钟版)

引言 我想要把打包的python程序变得好看 交互起来变得简单 遂 图形化界面 然 相关的库有很多 所以 对比&#xff01; 开整 8个图形化界面库 在Python中&#xff0c;有多种图形用户界面&#xff08;GUI&#xff09;库可以用来创建丰富的图形化应用程序。以下是一些主要的图…

Linux基础——进程初识(二)

1. 对当前目录创建文件的理解 我们知道在创建一个文件时&#xff0c;它会被默认创建到当前目录下&#xff0c;那么它是如何知道当前目录的呢&#xff1f; 对于下面这样一段代码 #include <stdio.h> #include <unistd.h>int main() {fopen("tmp.txt", …

2024 Nomachine 最简安装与使用指南

一、前言 二、Nomachine安装包的下载 1、Windows系统下Nomachine包的下载 2、Linux系统Nomachine的下载 &#xff08;1&#xff09;下载Nomachine安装包 &#xff08;2&#xff09;解压安装包 &#xff08;3&#xff09;添加权限 &#xff08;4&#xff09;下载安装包 三、在Wi…

SoapUI 压力测试全面指南

SoapUI 压力测试 SoapUI 想要进行 压力测试&#xff0c;就要使用其中的 LoadTest 功能。 创建 LoadTest LoadTest 能实现 压力测试 的效果&#xff0c;我们可以先创建 Test Suit&#xff0c;也就是测试套件&#xff0c;然后在 Test Suit 中去创建 LoadTest。 下图就是创建好…

【zk源码分析】

zk作为java分布式系统注册中心和配置中心的典范&#xff0c;一直在思考分析这么一个系统到底从哪里入手呢&#xff1f; zk在使用上是非常的简单&#xff0c;监听节点的变化即可。 一般是从哪里使用&#xff0c;就从哪里开始研究api。 客户端和zk断开时&#xff0c;我看到了一…

被低估的流量宝地,如何通过Reddit为Shopify店铺引流?

独立站店铺相对于电商平台来说&#xff0c;有一个运营难点那就是需要自主引流。做好引流&#xff0c;你的Shopify店铺也就成功了一半。Reddit作为国外知名的论坛平台&#xff0c;非常适合作为引流的阵地&#xff0c;许多人对这个网站尚不了解&#xff0c;接下来就为大家介绍如何…

亚马逊站内广告位置在哪设置?怎么设置广告位置?-站斧浏览器

亚马逊站内广告位置在哪设置&#xff1f; 亚马逊提供了多种广告类型&#xff0c;包括&#xff1a; Sponsored Products&#xff08;赞助产品&#xff09;&#xff1a;在搜索结果和商品详情页中展示。 Sponsored Brands&#xff08;赞助品牌&#xff09;&#xff1a;在搜索结…

人工智能大模型:定义、发展和应用

⭐简单说两句⭐ ✨ 正在努力的小新~ &#x1f496; 超级爱分享&#xff0c;分享各种有趣干货&#xff01; &#x1f469;‍&#x1f4bb; 提供&#xff1a;模拟面试 | 简历诊断 | 独家简历模板 &#x1f308; 感谢关注&#xff0c;关注了你就是我的超级粉丝啦&#xff01; &…

位运算 (运算符)

文章目录 位运算位运算概述位运算概览& 按位与&#xff08;AND&#xff09;| 按位或&#xff08;bitwise OR&#xff09;^ 按位异或&#xff08;bitwise XOR&#xff09;~ 按位非&#xff08;bitwise NOT&#xff09;<< 左移&#xff08;bitwise shift left&#xff…

WebSocket的优点和缺点:一文详解。

WebSocket 的优缺点 WebSocket 协议是一种双向通信协议&#xff0c;它使用单个 TCP 连接实现全双工通信&#xff0c;这使它比传统的 HTTP 协议更有效率。 WebSocket 优点 双向通信&#xff1a; WebSocket 协议支持双向通信&#xff0c;使服务器和客户端之间的通信更加方便和快…

【通讯录案例-登录功能-Segue Objective-C语言】

一、我们接下来呢,来说这个登录按钮的实现, 1.我们来实现一下这个登录按钮的一个功能啊, 比如说,当我点击“登录”了以后,我要跳到后边儿的那个TableView, 首先呢,我们来看一下示例程序,参考一下, 当我们上边这两个文本框都有值的时候, 当这两个文本框都有值了以后…

项目框架构建之4:基础类,公共扩展方法项目的构建

本文是“项目框架构建”系列之4&#xff0c;本文介绍基础类&#xff0c;公共扩展方法项目的构建。 为什么要构建基础类、公共扩展方法呢&#xff1f;因为我们在项目中经常会使用到一些常用的扩展方法&#xff0c;以及一些基础标准类。将这些公共标准的类放在基础项目Xejen中是…