算法训练营第三十四天 | LeetCode 455 分发饼干、LeetCode 376 摆动序列、LeetCode 53 最大子数组和

devtools/2024/9/22 19:38:13/

LeetCode 455 分发饼干

这题排序后双指针即可。若s[j]>=g[i],两者都往后移,否则只有j能往后移。

贪心思想体现在对于每块饼干最大限度地被胃口最接近的孩子分到,达到利用率最高。

代码如下:

class Solution {public int findContentChildren(int[] g, int[] s) {for (int i = 0; i < g.length-1; i++) {for (int j = 0; j < g.length - 1 - i; j++) {if (g[j] > g[j+1]) {int temp = g[j+1];g[j+1] = g[j];g[j] = temp;}}}for (int i = 0; i < s.length-1; i++) {for (int j = 0; j < s.length - 1 - i; j++) {if (s[j] > s[j+1]) {int temp = s[j+1];s[j+1] = s[j];s[j] = temp;}}}int num = 0;int i = 0, j = 0;while (i < g.length && j < s.length) {if (g[i] <= s[j]) {i++; j++;num++;} else {j++;}}return num;}
}

java里的排序函数还不太熟悉,先还是用冒泡吧。

LeetCode 376 摆动序列

这题看的题解,随着下标增长,主要记录波峰波谷数目,其中波峰波谷其实是加在一起的,不够最后看大小判断最大的那个序列最后一段是波峰还是波谷。

代码如下:

class Solution {public int wiggleMaxLength(int[] nums) {int n = nums.length;if (n < 2) {return n;}int up = 1, down = 1;for (int i = 1; i < n; i++) {if (nums[i] > nums[i - 1]) {up = down + 1;} else if (nums[i] < nums[i - 1]) {down = up + 1;}}return Math.max(up, down);}
}

这种解法相对于消减法在0,0,0这个测试用例上要更容易处理一点。

LeetCode 53 最大子数组和

这题其实满简单,就是要每一步先用记录和的变量sum记录这一路过来加上的数值,但是如果它已经比当前值小了,就直接将它的值变成当前值。贪心也就是贪在这里。用局部状态简化全局推导,同时用一个max变量,每一次循环和它进行比较,及时记录下最大值。

这里采用一种技巧:将sum和max赋值成nums[0],之后循环下标从1开始,这样可以避免一些问题,比如元素值可能是负数。

代码如下:

class Solution {public int maxSubArray(int[] nums) {int sum = nums[0];int max = nums[0];for (int i = 1; i < nums.length; i++) {sum += nums[i];if (nums[i] > sum) sum = nums[i];if (max < sum) max = sum;}return max;}
}


http://www.ppmy.cn/devtools/42588.html

相关文章

ThreadLocal原理及使用

一、引言 在Java多线程编程中&#xff0c;ThreadLocal是一个非常有用的工具&#xff0c;它提供了一种将对象与线程关联起来的机制&#xff0c;使得每个线程都可以拥有自己独立的对象副本&#xff0c;从而避免了线程安全问题。然而&#xff0c;使用不当会导致内存泄漏问题。 二…

【Python爬虫】Selenium使用

安装配置教程自行搜索 所用驱动chromedriver应与chrome浏览器版本相对应 pip install selenium 笔者selenium所用版本为4.11.2&#xff0c;新旧版之间会有差别 from selenium import webdriver driver webdriver.Chrome()实例化driver对象后&#xff0c;driver对象有一些常…

[集群聊天服务器]----(三)ChatService模块,解耦网络模块和业务模块

接着上一节[集群聊天服务器]----(二)利用muduo网络库实现网络模块ChatServer的剖析&#xff0c;我们发现需要对网络模块和业务模块进行解耦&#xff0c;引入了ChatService类&#xff0c;接下来我们来看一下业务模块ChatService类具体做了什么。 成员变量 //存储消息id和其对应…

【Python】—— 公共的方法

目录 &#xff08;一&#xff09;公共操作 1.1 公共操作之运算符加号 1.2 公共操作之运算符乘号 1.3 公共操作之运算符判断数据是否存在 &#xff08;二&#xff09;公共方法 2.1 公共方法-len 2.2 公共方法-del 2.3 公共方法-max和min 2.4 公共方法-range 2.5 公共方…

微信小程序 - - - - - 使用TDesign库(微信小程序UI库)

使用TDesign库 1. 初始化依赖2. 安装TDesgin3. npm构建3. 修改 app.json 1. 初始化依赖 npm init -y2. 安装TDesgin yarn add tdesign-miniprogram -S --productionor npm install tdesign-miniprogram -S --production3. npm构建 3. 修改 app.json 将 app.json 中的 “styl…

vue中数据已经改变了,但是table里面内容没更新渲染!

解决方案&#xff1a; 给table或者el-table标签上添加一个动态key值&#xff0c;只要数据发生改变&#xff0c;key值变动一下即可 标签上&#xff1a; :key“timeStamp” 初始data&#xff1a;timeStamp:0, 更新数据&#xff1a;this.timeStamp 这样每次更新数据&#xff…

el-table自定义表头数据不更新

我的表头是有三层的&#xff0c;中间一层展示对应的数据&#xff0c;所以需要自定义&#xff0c;官方的文档显示的写法如下&#xff1a; <el-table-column><template slot“header”><div>{{dayData.supply}}、{{dayData.use}}</div></template>…

多电脑共享鼠标键盘

由于要在两个电脑之间共用一套鼠标键盘&#xff0c;所以在此记录一下。 mouse without borders Mouse without Borders 是一款免费的 Windows 工具&#xff0c;允许你在多台电脑之间共享鼠标和键盘。 安装与配置步骤 下载和安装&#xff1a; 前往 Mouse without Borders 官…