代码随想录-刷题第三十四天

1005. K 次取反后最大化的数组和

题目链接:1005. K 次取反后最大化的数组和

思路:取反k次,保证每次取反的数值是数组中的最小值,最后数组和就是最大的。

class Solution {public int largestSumAfterKNegations(int[] nums, int k) {for (int i = 0; i < k; i++) {int minIndex = 0;for (int j = 0; j < nums.length; j++) {if (nums[j] < nums[minIndex]) {minIndex = j;}}nums[minIndex] = -nums[minIndex];}int res = 0;for (int i = 0; i < nums.length; i++) {res += nums[i];}return res;}
}

代码随想录中本题的解题步骤为:

  • 第一步:将数组按照绝对值大小从大到小排序,注意要按照绝对值的大小
  • 第二步:从前向后遍历,遇到负数将其变为正数,同时K–
  • 第三步:如果K还大于0,那么反复转变数值最小的元素,将K用完
  • 第四步:求和
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++) {// 从前向后遍历,遇到负数将其变为正数,同时K--if (nums[i] < 0 && K > 0) {nums[i] = -nums[i];K--;}}// 如果K还大于0,那么反复转变数值最小的元素,将K用完if (K % 2 == 1) nums[len - 1] = -nums[len - 1];return Arrays.stream(nums).sum();  // 求和}
}

134. 加油站

题目链接:134. 加油站

思路:如果总油量减去总消耗量大于等于0,那么说明一定可以跑完一圈。从0开始累加每个加油站的剩余量记作curSum,一旦发现curSum小于0,说明[0, i]区间都不能作为起始位置,起始位置从i+1算起,重新累加curSum

img

**局部最优:**当前curSum小于0,则[0, i]范围内无起始位置,起始位置至少是i+1;

**全局最优:**找到可以跑一圈的起始位置。

class Solution {public int canCompleteCircuit(int[] gas, int[] cost) {int curSum = 0;int totalSum = 0;int start = 0;for (int i = 0; i < gas.length; i++) {int temp = gas[i] - cost[i];totalSum += temp;   // 累加所有的curSum += temp;     // 累加当前的剩余汽油if (curSum < 0) {   // 如果当前的汽油小于0了start = i + 1;  // 更新起始位置curSum = 0;     // 重新累加当前剩余汽油}}if (totalSum < 0)return -1;   // 如果所有的汽油数小于消耗数一定不行。return start;}
}

135. 分发糖果

题目连接:135. 分发糖果

思路:采用两次贪心的策略:

  • 一次是从左到右遍历,只比较右边孩子评分比左边大的情况。
  • 一次是从右到左遍历,只比较左边孩子评分比右边大的情况。

从局部最优推出了全局最优,即:相邻的孩子中,评分高的孩子获得更多的糖果。

135.分发糖果1

candy[i]只有取最大的才能既保持比左边candy[i - 1]的糖果多,也比右边candy[i + 1]的糖果多

class Solution {public int candy(int[] ratings) {int[] candy = new int[ratings.length];// 先给每一个孩子分一个糖果for (int i = 0; i < candy.length; i++) {candy[i] = 1;}// 从前向后,右边孩子比左边大,就给右边孩子多一个for (int i = 1; i < candy.length; i++) {if (ratings[i] > ratings[i - 1]) {candy[i] = candy[i - 1] + 1;}}// 从后向前,左边孩子比右边大,就给左边孩子多一个// 此时左边需要考虑同时满足自己的左右两边// 取本身的糖果数(符合比它左边大) 和 右边糖果数 + 1 二者的最大值,// 这样才符合 它比它左边的大,也比它右边大for (int i = candy.length - 2; i >= 0; i--) {if (ratings[i] > ratings[i + 1] ) {candy[i] = Math.max(candy[i], candy[i + 1] + 1);}}// 计算结果int res = 0;for (int i = 0; i < candy.length; i++) {res += candy[i];}return res;}
}

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

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

相关文章

Node.js安装与配置

聚沙成塔每天进步一点点 ⭐ 专栏简介 Vue学习之旅的奇妙世界 欢迎大家来到 Vue 技能树参考资料专栏!创建这个专栏的初衷是为了帮助大家更好地应对 Vue.js 技能树的学习。每篇文章都致力于提供清晰、深入的参考资料,让你能够更轻松、更自信地理解和掌握 Vue.js 的核心概念和技…

【科学计算语言】实验二 Python函数

【目的和要求】 &#xff08;1&#xff09;掌握Python语言的函数设计过程 &#xff08;2&#xff09;掌握自定义函数及其调用 &#xff08;3&#xff09;熟练运用Python内置函数 【实验准备】 系统函数库的导入、自定义函数 【实验内容】 编程实现&#xff1a;利用Pytho…

在 QT 项目中使用开源大模型

随着 ChatGPT 和 Stable Diffusion 的大热&#xff0c;AI 不再作为一个玩具&#xff0c;走进人们的视线&#xff0c;AIGC 产品也如雨后春笋一般纷纷涌现。然而对大多数 C程序员而言&#xff0c;却处在尴尬的位置。 诚然&#xff0c;AI 的核心都是 C实现的&#xff0c;但对于普通…

java并发编程六 共享模型之内存

文章目录 Java 内存模型可见性解决方法 有序性解决方法 Java 内存模型 JMM 即 Java Memory Model&#xff0c;它定义了主存、工作内存抽象概念&#xff0c;底层对应着 CPU 寄存器、缓存、硬件内存、CPU 指令优化等。 JMM 体现在以下几个方面 原子性 - 保证指令不会受到线程上…

3D模型人物换装系统(一)

3D模型人物换装系统 介绍遇到的问题问题修复具体实现换装1.准备所有模型部位和模型骨骼部位准备材质准备模型根骨骼准备创建文件夹将上述模型拖成预制体创建一个动画状态机给他们附上待机动画 2.脚本驱动Mesh合并代码 UCombineSkinnedMgr.cs创建Mesh以及实例化对象的代码 UChar…

主流数据库体系结构

MySQL 我们通常所说的 MySQL 数据库服务器由一个实例&#xff08;instance&#xff09;以及一个数据库&#xff08;database&#xff09;组成。实例包括一组后台进程/线程和许多内存结构&#xff0c;用于管理数据库&#xff1b;数据库由一组磁盘文件组成&#xff0c;用于存储数…

人工智能在约会APP开发中的作用

约会APP已成为当今技术世界中结识人们的流行方式。这意味着您不必要求您的朋友去见某人约会。简而言之&#xff0c;技术改善了约会过程&#xff0c;而人工智能在约会APP开发中的兴起极大地影响了人们今天的约会方式。 在约会APP中使用人工智能技术可以改善个人寻找完美匹配对象…

vue3+element plus组件库中el-carousel组件走马灯特效,当图片变动时下面数字也随着图片动态变化

1.效果图 2.html <section style"height:30%"><div class"left-img1-title"><img src"../assets/img/title.png"alt""srcset""><div class"text">回收垃圾数量</div></div>…

1. 线程概述、线程和进程、 并发和并行、多线程的优势 、程序运行原理 、主线程、 线程的 6 种状态

文章目录 1. 线程概述1.1 线程和进程1.2 并发和并行1.3 多线程的优势1.4 程序运行原理1.5 主线程 1.6 线程的 6 种状态 1. 线程概述 1.1 线程和进程 ​ 进程是处于运行过程中的程序&#xff0c;并且具有一定的独立功能&#xff0c;进程是系统进行资源分配和调度的一个独立单位…

微信小程序 动态设置状态栏样式

onLoad(options) {//修改状态栏标题wx.setNavigationBarTitle({title: 页面标题, //页面标题success: () > {}, //接口调用成功的回调函数fail: () > {}, //接口调用失败的回调函数complete: () > {} //接口调用结束的回调函数&#xff08;调用成功、失败…

【数字图像处理】实验二 图像变换

图像变换 一、实验内容&#xff1a; 1&#xff0e; 熟悉和掌握利用Matlab工具进行数字图像的读、写、显示等数字图像处理基本步骤。 2&#xff0e; 熟练掌握各种图像变换的基本原理及方法。 3&#xff0e; 能够从深刻理解图像变换&#xff0c;并能够思考拓展到一定的应用领域。…

图像识别与人工智能到底是何关系?有何区别?

图像识别是人工智能领域的一个重要应用领域&#xff0c;它利用人工智能技术和算法来分析和理解图像内容。图像识别是使计算机能够模拟和理解人类视觉系统的能力&#xff0c;并从图像中提取出有用的信息和特征。 人工智能在图像识别中扮演着至关重要的角色&#xff0c;主要体现…