算法刷题Day 34 K次取反后最大化的数组和+加油站+分发糖果

news/2025/3/13 17:37:40/

Day 34 贪心算法

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

class Solution {
public:int largestSumAfterKNegations(vector<int>& nums, int k) {sort(nums.begin(), nums.end());int idx = 0;for (; idx < nums.size(); ++idx){if (nums[idx] < 0 && k > 0){nums[idx] = -nums[idx];k--;}else break;}sort(nums.begin(), nums.end()); // 这里需要重新排序一遍,因为前面调整了符号,所以现在最小值可能不是原来的最小正值if (k % 2){nums[0] = -nums[0];}int sum = 0;for (auto num : nums){sum += num;}return sum;}
};

代码随想录里面是按照绝对值从大到小进行排序的,这样就不用进行两次排序

class Solution {static bool cmp(int a, int b) // 注意这里要设置为静态成员函数{return abs(a) > abs(b);}public:int largestSumAfterKNegations(vector<int>& nums, int k) {sort(nums.begin(), nums.end(), cmp);for (auto &num : nums){if (num < 0 && k > 0){num = -num;k--;}}if (k % 2){nums[nums.size() - 1] = -nums.back();}int sum = 0;for (auto num : nums){sum += num;}return sum;}
};

134. 加油站

暴力解法

模拟的思想很重要,暴力解法模拟跑一圈的过程其实比较考验代码技巧的,要对while使用的很熟练。虽然会超时

class Solution {
public:int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {int totalGas = 0, totalCost = 0, len = gas.size();totalGas = accumulate(gas.begin(), gas.end(), 0);totalCost = accumulate(cost.begin(), cost.end(), 0);if (totalCost > totalGas) return -1;for (int i = 0; i < len; i++){int rest = gas[i] - cost[i];int loop = (i + 1) % len;while (rest > 0 && loop != i){rest += gas[loop] - cost[loop];loop = (loop + 1) % len;}if (rest >= 0 && loop == i){return i;}}return -1;}
};

贪心算法

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

135. 分发糖果

class Solution {
public:int candy(vector<int>& ratings) {vector<int> candies(ratings.size(), 1); // 注意:这里的初始值是1for (int i = 1; i < ratings.size(); i++){if (ratings[i - 1] < ratings[i]){candies[i]++;}}for (int i = ratings.size() - 2; i >= 0; i--){if (ratings[i + 1] < ratings[i]){candies[i] = max(candies[i + 1] + 1, candies[i]);}}return accumulate(candies.begin(), candies.end(), 0);}
};

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

相关文章

无法打开msi的问题

主要有两个原因 1.windows installer 没有打开&#xff0c;可以在控制面板的服务管理中打开 2.被杀毒软件屏蔽&#xff0c;可暂时暂停杀毒软件服务

msi制作

我们经常可以看到许多软件只有一个扩展名为MSI的文件&#xff0c;双击这个文件运行&#xff0c;就会出现和Windows应用软件安装非常相似的安装过程&#xff0c;MSI文件到底是什么&#xff1f;为什么许多软件开始用MSI格式来发行呢&#xff1f;请听我慢慢说来。 1.历史 说到MSI…

MSI-X总结

PCIe有三种中断,分别为INTx中断&#xff0c;MSI中断&#xff0c;MSI-X中断&#xff0c;其中INTx是可选的&#xff0c;MSI/MSI-X是必须实现的。 MSI&#xff0c; message signal interrupt, 是PCI设备通过写一个特定消息到特定地址&#xff0c;从而触发一个CPU中断。特定消息指的…

关于MSI

一、初识Windows功能增强“插件”MSI 我们经常可以看到许多软件只有一个扩展名为MSI的文件&#xff0c;双击这个文件运行&#xff0c;就会出现和Windows应用软件安装非常相似的安装过程&#xff0c;MSI文件到底是什么&#xff1f;为什么许多软件开始用MSI格式来发行呢&#xff…

提高视觉检测系统稳定性的隐藏办法——10G高速图像采集卡

提高视觉检测系统稳定性的隐藏办法——10G高速图像采集卡 目前&#xff0c;随着我国各方面配套基础设施建设的完善&#xff0c;企业技术、资金的积累&#xff0c;各行各业积极探索和大胆的尝试机器视觉技术&#xff0c;实现工业自动化、智能化。在机器视觉系统的使用过程中&am…

如何报考微软认证

微软认证报考指南 1 &#xff09;微软认证的报名时间 微软认证考试时间不同于国内的考试&#xff0c;是随报随考&#xff0c;考试的时间都由考生在携带身份证和考试费报名时自己决定的&#xff0c;只要考试中心正常营业&#xff0c;考生就可以正常报考!IT认证考试资源网建议考…

dji tsdk 开发(3)thermal sdk的测温应用(1)dji tsdk的封装

文章目录 1、Dirp.h 说明1.1 声明的全局类型和枚举值1.2、 class Dirp类定义2、Dirp.cpp 说明2.0、引用2.1、构造、析构、日志2.2、释放、销毁2.3、加载原始照片文件的数据2.4、提取RAW数据2.5、原始照片的分辨率3、tskd 的bug前面相关博客介绍了dji thermal sdk 的api和简单测…

2-vulnhub靶场,Earth

Vulnhub earth靶机 攻击机192.168.137.129 靶机192.168.137.128 开放22&#xff0c;80&#xff0c;443端口 发现443端口显示这个ip绑定了俩个域名 查看80端口 查看443端口 修改host文件 linux目录&#xff1a;/etc/hosts 后面添加192.168.137.128 earth.local terratest.ear…