Day34 | 1005.K次取反后最大化的数组和, 134. 加油站, 135. 分发糖果

news/2025/2/6 4:32:21/

Day34 | 1005.K次取反后最大化的数组和, 134. 加油站, 135. 分发糖果

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

LeetCode题目:https://leetcode.cn/problems/maximize-sum-of-array-after-k-negations/

整体思路

  首先对数组进行排序,由于存在负值,很容易得出数组开始如果存在负数的话,取反负数收益最大。如果负数取反结束,或者数组本身就只有整数,那么只对最小值取反的风险最小。

class Solution {
public:int largestSumAfterKNegations(vector<int>& nums, int k) {sort(nums.begin(),nums.end());int i=0;while(k){if(nums[i]<0&&i<nums.size()-1){nums[i] = 0 - nums[i];i++;k--;continue;}if(i>0&&nums[i-1]<nums[i]){nums[i-1] = 0 - nums[i-1];k--;}else{nums[i] = 0 - nums[i];k--;}}int sum=0;for(int i=0;i<nums.size();i++){sum+=nums[i];}return sum;}
};

加油站

LeetCode题目:https://leetcode.cn/problems/gas-station/

解题思路

  加油站问题首先需要明确两个定义:(1)如果循环一圈的总油耗大于总加油量,那么一定无法完成一次循环。(2)如果条件一满足,到达一个位置的时候,剩余油量为负数,则说明从开始到该点均不能作为起始点,起始点应该作为该位置的下一个位置。

  代码如下:

class Solution {
public:int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {int startIndex = 0,currSum=0,totalSum=0;for(int i = 0;i<gas.size();i++){currSum+=(gas[i]-cost[i]);totalSum+=(gas[i]-cost[i]);if(currSum<0){startIndex = i+1;currSum=0;}}if(totalSum<0) return -1;return startIndex;}
};

分发糖果

LeetCode题目:https://leetcode.cn/problems/candy/

解题思路

  当一个贪心问题需要考虑两个方向的的得失收益时候,一定要先考虑完一边再说另一边!!!

  因此,根据上述原则,我们可以先考虑只看每个孩子的左侧孩子分数(从左侧开始看是因为循环遍历时,可以先对0位置赋值。如果看右侧孩子,则第一个要从最右侧开始),如果大于左侧孩子,则糖果数量要比左孩子+1,否则给最少的糖果。

  在一次遍历以后,每个孩子针对左侧孩子的糖果个数已经确定,此时要确定右侧孩子的对比,此时,如果右侧孩子的分数小于自身,则自身应当是右侧孩子糖果个数+1。否则不改变。

  代码如下:

class Solution {
public:int candy(vector<int>& ratings) {vector<int> candies(ratings.size(),0);for(int i=0;i<ratings.size();i++){if(i>0){if(ratings[i]>ratings[i-1]){candies[i] = candies[i-1]+1;}else{candies[i] = 1;}}else{candies[i] = 1;}}int sum = candies[candies.size()-1];for(int j = ratings.size()-1; j > 0; j--){if(ratings[j-1]>ratings[j]){candies[j-1] = max(candies[j]+1,candies[j-1]);}sum+=candies[j-1];}return sum;}
};

http://www.ppmy.cn/news/479949.html

相关文章

2.1C++派生

C派生概述 C中的派生允许从一个已有的类中创建一个新的类&#xff0c;该新类继承了原有类的属性和方法。 派生类可以增加新的属性和方法&#xff0c;也可以重写原有类的方法以改变其行为。 C中的派生类可以通过公有、私有和保护继承来继承基类的成员。 公有继承允许派生类访…

华为荣耀笔记本linux系统怎么样,荣耀笔记本和华为笔记本有什么区别

以荣耀Magic Book Pro和华为matebook 14为例&#xff0c;其区别如下&#xff1a; 1、屏幕&#xff1a;荣耀Magic Book Pro屏幕尺寸为16.1英寸&#xff0c;显示比例为16比9&#xff0c;分辨率为1920乘以1080&#xff0c;华为matebook 14屏幕尺寸为14英寸&#xff0c;显示比例3比…

笔记本的出厂预激活模式和运输模式

为了判断购买的电脑是不是新机而不是退货的二手机&#xff0c;普通用户判断一般是&#xff0c;开机是否会跳欢迎使用windows界面&#xff0c;是否需要插电才能开机。实际上&#xff0c;这两步判断80%的情况下是正确的&#xff0c;但是也是能改的。 一、出厂预激活模式和恢复 …

python编程用台式还是笔记本好_敲代码和编程适合什么样的笔记本?深度推荐

导读&#xff1a;编程&#xff0c;实际上范围还是很广的&#xff0c;有简单的PLC也算编程、Excel表格还自带VB&#xff0c;有复杂的系统插件&#xff0c;&#xff1b;我们说电脑配置&#xff0c;还是要落实到应用程序或者开发程序上面来&#xff0c;不能泛泛而谈&#xff1b; …

被卖到 2w 的 ChatGPT 提示词 Prompt 你确定不想要吗?

有朋友说&#xff0c;用 ChatGPT 生成的文案刻板化&#xff0c;格式化&#xff0c;而且往往也不是我想要的。‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍ 想要用好 ChatGPT 人工智能工具太难了&#xff0c;想一个好的提示词&#xff0c;也太不容易了&#xff0c;ChatGPT 就像一个宝藏…

图片怎么去除底色?怎么把图片转成透明底?

当你需要将一张图片去白底变透明时&#xff0c;除了使用Photoshop这种专业的图像编辑软件外&#xff0c;还有一种比较简单的方法&#xff0c;即使用专业的图片在线去底色工具处理。 这种方法不需要安装任何软件&#xff0c;然后工具会自动将图片的背景色变成透明。操作非常简单…

第60讲:Python编程案例之不重复的三位数

文章目录 1.需求描述以及设计思路2.代码编写及实现1.需求描述以及设计思路 首先我们来理解一下什么是不重复的三位数: 不重复的三位数指的是,要求百位、十位、个位的三个数字都不能重复,从而形成的一个三位数。 例如由1、2、3、4、5这五个数字组成不重复的三位数,百位可以…

静态NAT和动态NAT实验

静态NAT 拓扑 需求 实现企业内网主机&#xff08;PC1/PC2&#xff09;访问公网网站服务器&#xff08;Server1&#xff09; 配置步骤 第一步&#xff1a;给PC1/PC2/Server1配置接口IP地址&#xff0c;掩码&#xff0c;网关 第二步&#xff1a;R1配置路由和静态NAT -边界路由器…