代码随想录算法训练营第三十三天| LeetCode1005.K次取反后最大化的数组和、LeetCode134. 加油站、LeetCode135. 分发糖果

#LeetCode 1005. Maximise Sum Of Array After K Negations

#LeetCode 1005. 视频讲解:贪心算法,这不就是常识?还能叫贪心?LeetCode:1005.K次取反后最大化的数组和_哔哩哔哩_bilibili

这个题目中用到了两次局部最优,第一次是在先用k 将数组中绝对值大的负数转换为正数,这样保证了局部最优。之后又使用k 剩余的次数用在绝对值最小的数值上,这是第二次局部最优。为了提高代码的运行效率,使用k % 2 是否存在余数来快速判断,是否需要给绝对值最小的数目 * (-1) 来消耗掉k 的数值。

这里还用到了流式操作来实现对整数数组 nums 的绝对值大小排序,IntStream.of(array) 先将给定的整数数组转换为一个 IntStream 对象。 .boxed()是将 IntStream 转换为一个包装类型的 Stream,即 Stream<Integer>,这样可以使用 Stream 的各种方法。 .sorted((o1, o2) -> Math.abs(o2) - Math.abs(o1)) 这对流中的元素进行排序。排序的方式是通过比较元素的绝对值大小来实现的。Comparator 接口的 lambda 表达式 (o1, o2) -> Math.abs(o2) - Math.abs(o1) 指定了排序规则,这个排序方式会将绝对值较大的元素排在前面。 .mapToInt(Integer::intValue) 这将 Stream<Integer> 转换为一个 IntStream,将流中的 Integer 元素转换为其对应的基本类型 int。 .toArray()最后将排序后的 IntStream 转换回一个整数数组,则排序完成。

贪心算法代码:

class Solution {public int largestSumAfterKNegations(int[] nums, int k) {nums = IntStream.of(nums).boxed().sorted((o1, o2) -> Math.abs(o2) - Math.abs(o1)).mapToInt(Integer::intValue).toArray();int len = nums.length;for (int i = 0; i < len; i++) {if (nums[i] < 0 && k > 0) {nums[i] *= -1;k--;}}if (k % 2 == 1) {nums[len - 1] *= -1;}return Arrays.stream(nums).sum();}
}

#LeetCode 134. Gas Station

#LeetCode 134. 视频讲解:贪心算法,得这么加油才能跑完全程!LeetCode :134.加油站_哔哩哔哩_bilibili

贪心算法的一个要点是:找到最优方案,也就是找到贪心的考虑角度。这个题目是考虑全局最优。如果是增加的油量大于消耗的油量,那么这是优化的方向。设置一个currentSum 这个参数记录从startIndex 到目前的位置中,净增的油量,如果currentSum 变为了负数,则说明已经无法到达目前的位置,那么下次就考虑从这个位置后一个数组开始继续考虑,这个位置之前的所有位置都不会再考虑。

贪心算法代码:

class Solution {public int canCompleteCircuit(int[] gas, int[] cost) {int currentSum = 0;int totalSum = 0;int startIndex = 0;for (int i = 0; i < gas.length; i++) {currentSum += (gas[i] - cost[i]);totalSum += (gas[i] - cost[i]);if (currentSum < 0) {startIndex = i + 1;currentSum = 0;}}if (totalSum < 0) {return -1;} else {return startIndex;}}
}

#LeetCode 135. Candy

#LeetCode 135. 视频讲解:贪心算法,两者兼顾很容易顾此失彼!LeetCode:135.分发糖果_哔哩哔哩_bilibili

需要比较两边的情况,需要分为左右两种情况来考虑。

在第一种情况中:是左边的评分高于右侧评分,从左向后遍历,此时的局部最优是只要右边评分比左边评分高,右边的孩子就多一个糖果。

第二种情况是:左孩子大于右孩子的情况需要考虑从右往左的遍历顺序。在这里需要再次考虑贪心,从左向后遍历和从右向左遍历的结果进行比较,选择最大的糖果数目。

贪心算法代码:

class Solution {public int candy(int[] ratings) {int[] candy = new int[ratings.length];for (int i = 0; i < ratings.length; i++) {candy[i] = 1;}for (int i = 1; i < ratings.length; i++) {if (ratings[i] > ratings[i - 1]) {candy[i] = candy[i - 1] + 1;}}for (int j = ratings.length - 2; j >= 0; j--) {if (ratings[j] > ratings[j + 1]) {candy[j] = Math.max(candy[j], candy[j + 1] + 1);}}int sum = 0;for (int k = 0; k < ratings.length; k++) {sum += candy[k];}return sum;}
}

优化贪心算法:

class Solution {public int candy(int[] ratings) {int[] candy = new int[ratings.length];candy[0] = 1;for (int i = 1; i < ratings.length; i++) {candy[i] = (ratings[i] > ratings[i - 1]) ? candy[i - 1] + 1 : 1;}for (int i = ratings.length - 2; i >= 0; i--) {if (ratings[i] > ratings[i + 1]) {candy[i] = Math.max(candy[i], candy[i + 1] + 1);}}int sum = 0;for (int num : candy) {sum += num;}return sum;}
}

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

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

相关文章

14-alert\confirm\prompt\自定义弹窗

一、认识alert\confirm\prompt 下图依次是alert、confirm、prompt&#xff0c;先认清楚长什么样子&#xff0c;以后遇到了就知道如何操作了。 二、alert操作 先用driver.switch_to.alert方法切换到alert弹出框上&#xff1b;可以用text方法获取弹出的文本信息&#xff1b;acce…

Spring Cloud | 客户端 “负载均衡器“ : Ribbon

目录: 1. 什么是 "负载均衡" ? ( 通过 "负载均衡" 可以将 "用户请求" "分发" 到 不同的服务器&#xff0c;以此来提高 "性能" 和 "可靠性" )2. "负载均衡" 的 分类 &#xff1f;3. 认识 Ribbon :3.1 R…

【蓝桥杯国赛】动态规划

“动态规划”在蓝桥杯中的出题类型&#xff0c;主要为两种&#xff0c; 要格外注意&#xff0c;每一次 dp 的迭代更新&#xff0c;都是针对于当前位置下的“所有情况”进行的&#xff0c; 应着眼于当前位置的每一种情况。 类型一&#xff1a;一共有多少种情况&#xff1f; 1…

Flutter 中的 ScrollConfiguration 小部件:全面指南

Flutter 中的 ScrollConfiguration 小部件&#xff1a;全面指南 Flutter 是一个功能强大的 UI 框架&#xff0c;它允许开发者使用 Dart 语言来构建高性能、美观的移动、Web 和桌面应用。在 Flutter 中&#xff0c;滚动是用户界面中一个常见的交互元素。ScrollConfiguration 是…

使用 Apache Commons Exec 自动化脚本执行实现 MySQL 数据库备份

&#x1f604; 19年之后由于某些原因断更了三年&#xff0c;23年重新扬帆起航&#xff0c;推出更多优质博文&#xff0c;希望大家多多支持&#xff5e; &#x1f337; 古之立大事者&#xff0c;不惟有超世之才&#xff0c;亦必有坚忍不拔之志 &#x1f390; 个人CSND主页——Mi…

C# 中的字符与字符串

简介 在C#编程语言中&#xff0c;字符和字符串是处理文本数据的基础。字符是单个的字母或符号&#xff0c;而字符串是字符的集合。本篇博客将详细介绍C#中的字符类型 char 和字符串类型 string&#xff0c;以及它们的基本操作。 字符类型 char char 类型在C#中用于表示单个字…

Part 3.1 深度优先搜索

深度优先搜索&#xff08;DFS&#xff09;&#xff0c;即按照深度优先的顺序搜索的算法。 深度优先搜索一般使用栈来实现。 [USACO1.5] 八皇后 Checker Challenge 题目描述 一个如下的 6 6 6 \times 6 66 的跳棋棋盘&#xff0c;有六个棋子被放置在棋盘上&#xff0c;使得…

介绍HDD、SSD、U盘:存储技术的恢复原理与安全保存私密文件的方法

随着数字存储技术的飞速发展&#xff0c;硬盘驱动器&#xff08;HDD&#xff09;、固态驱动器&#xff08;SSD&#xff09;和USB闪存驱动器&#xff08;U盘&#xff09;已经成为我们日常生活中不可或缺的部分。尽管这些设备在存储数据方面表现出色&#xff0c;但数据丢失问题仍…

Vue不使用v-model的时候怎么监听数据变化?

在Vue中&#xff0c;如果你不想使用v-model来监听数据变化&#xff0c;你仍然可以通过其他几种方式来实现。v-model实际上是v-bind&#xff08;或简写为:&#xff09;和v-on&#xff08;或简写为&#xff09;的语法糖&#xff0c;它同时处理了数据的双向绑定&#xff1a;将值绑…

go解析yaml

go解析yaml文件关键就是结构体的创建 初学go tag字段要和yaml文件中的key对应起来&#xff0c;每个层级都要创建对应的结构体&#xff0c;有点烦 package configimport ("gopkg.in/yaml.v3""os" )type Config struct {MysqlConfig MysqlConfig yaml:&q…

开发nfc读卡器应用出现报错Unhandled Exception: SCARD_E_NO_SERVICE

使用flutter开发ACR122U的nfc读卡器的时候&#xff0c;报错&#xff1a; [ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: Exception: Error while establing context. Reason: SCARD_E_NO_SERVICE #0 PCSCBinding._checkAndThrow (package:fl…

Flink实现实时异常登陆监控(两秒内多次登陆失败进行异常行为标记)

Flink实现异常登陆监控&#xff08;两秒内多次登陆失败进行异常行为标记&#xff09; 在大数据处理领域&#xff0c;Apache Flink 是一个流行的开源流处理框架&#xff0c;能够高效处理实时数据流。在这篇博客中&#xff0c;我们将展示如何使用 Apache Flink 从 MySQL 中读取数…

bug清单问题

1. embedding 层 index out of range in self 原因&#xff1a; 一般是因为模型的vocab_size与提供的vocab.txt文件的词大小不一致。 检查方法&#xff1a; 可通过以下方法&#xff0c;查看tensor的最大最小值# print(token_ids, token_ids.max(), token_ids.min()) # &…

科研数据分析常见问题

许多使用SPSSAU进行初次科研数据分析的同学&#xff0c;可能对数据分析方法的深层原理和研究思路缺乏全面的把握。因此&#xff0c;当导师针对数据研究方法提出具体问题时&#xff0c;他们可能会感到些许困惑或难以立即给出满意的答复。鉴于此&#xff0c;SPSSAU汇总了一些常见…

【工具】创客贴会员|创客贴截止2024年6月所有AI功能效果实测(热门推荐和图片编辑部分)

上一篇&#xff1a;【工具】创客贴会员&#xff5c;万字测评&#xff01;前沿设计网站创客贴的 AI 文生图效果测评 上一篇写的时候只测了文生图&#xff0c;因为百度那边活动没和创客贴接洽好&#xff0c;他们不清楚创客贴的AI和其他会员功能分开了&#xff0c;导致只有10次体…

什么是AVIEXP提前发货通知?

EDI&#xff08;电子数据交换&#xff09;报文是一种用于电子商务和供应链管理的标准化信息传输格式。AVIEXP 是一种特定类型的 EDI 报文&#xff0c;用于传输提前发货通知信息。 AVIEXP 报文简介 AVIEXP 是指 Advanced Shipping Notification提前发货通知报文&#xff0c;用…

virtualbox中ubuntu22.04网络配置

第一&#xff1a;添加两个网卡&#xff0c;网卡1是NAT方式&#xff0c;网卡2是仅主机模式&#xff08;两个顺序不能颠倒&#xff09; 第二步&#xff1a;启动ifconfig查看网络

搭载昇腾310NPU的Orange Pi AIpro开箱体验以及深度学习样例测试

Orange Pi AIpro开箱体验以及样例测试 随着人工智能和物联网技术的快速发展&#xff0c;单板计算机&#xff08;Single Board Computer, SBC&#xff09;在创客和开发者社区中越来越受到欢迎。我最近入手了一款高性能的单板计算机——Orange Pi AIpro。 在入手此款AI开发板之…

探索 Ollama: 你的本地 AI 助手

本期推荐的开源项目是 Ollama&#xff0c;它是一款本地大模型运行工具&#xff0c;可以帮助用户轻松下载和运行各种大型语言模型&#xff08;LLM&#xff09;&#xff0c;而无需将数据上传到云端。以下是关于 Ollama 的介绍以及安装和使用教程&#xff1a; Ollama 是什么&#…

VB.net 进行CAD二次开发(二)

利用参考文献2&#xff0c;添加面板 执行treeControl New UCTreeView()时报一个错误&#xff1a; 用户代码未处理 System.ArgumentException HResult-2147024809 Message控件不支持透明的背景色。 SourceSystem.Windows.Forms StackTrace: 在 System.Windows…