day34代码回想录 K次取反后最大化的数组和&加油站&分发糖果

大纲

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

● 134. 加油站

● 135. 分发糖果

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

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

题目:

本题的思路是对数组按照绝对值从小到大排序后,将排序后数组小于0的部分先进行反转,如果k还有,那么将绝对值最小值【nums[0]】进行反复反转,消耗完剩下的反转次数,则可以最大化数组和

复制代码
// 排序函数,按照绝对值从小到大排序
bool _compareAbs(int a, int b) {
    return abs(a) < abs(b);
}

int kthReveaseArray(vector<int>& nums, int k) {
    // 按照绝对值排序
    sort(nums.begin(), nums.end(), _compareAbs);
    int sum = 0;
    for (int i = nums.size() - 1; i >= 0; --i) {
        if (nums[i] < 0 && k-- > 0)
            nums[i] = -nums[i];
    }
    // k还有那么反复反转绝对值最小的值
    if (k % 2 == 1) nums[0] = -nums[0];
    for (int i = 0; i < nums.size(); ++i) {
        sum += nums[i];
    }

    return sum;
}

134. 加油站

题目:134. 加油站

本题比较难想到,需要遍历汽油数组,统计**走到当前节点总共剩下的汽油数量 totalLeft 从start开始时剩下的汽油数量singleLeft **,如果singleLeft 小于0了,那么说明以start开始的节点是行不通的,已经耗完了汽油。遍历完汽油数组后,如果totalLeft 还大于0,则返回start作为起点

复制代码
int getGasCost(vector<int>& gas, vector<int>& cost) {
    int start = 0, totalLeft = 0, singleLeft = 0;
    for (int i = 0; i < gas.size(); ++i) {
        singleLeft += gas[i] - cost[i];
        totalLeft += gas[i] - cost[i];
        if (singleLeft < 0) {
            start = i + 1;
            singleLeft = 0;
        }
    }
    if (totalLeft >= 0) return start;
    return -1;
}

135. 分发糖果

题目:135. 分发糖果

本题看看解题参考吧

复制代码
int candy(vector<int>& ratings) {
        vector<int> candyVec(ratings.size(), 1);
        // 从前向后
        for (int i = 1; i < ratings.size(); i++) {
            if (ratings[i] > ratings[i - 1]) candyVec[i] = candyVec[i - 1] + 1;
        }
        // 从后向前
        for (int i = ratings.size() - 2; i >= 0; i--) {
            if (ratings[i] > ratings[i + 1] ) {
                candyVec[i] = max(candyVec[i], candyVec[i + 1] + 1);
            }
        }
        // 统计结果
        int result = 0;
        for (int i = 0; i < candyVec.size(); i++) result += candyVec[i];
        return result;
    }
相关推荐
2301_764441334 分钟前
Python构建输入法应用
开发语言·python·算法
AI科技星14 分钟前
为什么变化的电磁场才产生引力场?—— 统一场论揭示的时空动力学本质
数据结构·人工智能·经验分享·算法·计算机视觉
TheLegendMe1 小时前
贪心+线程安全单例
算法·哈希算法
豐儀麟阁贵1 小时前
8.5在方法中抛出异常
java·开发语言·前端·算法
胖咕噜的稞达鸭2 小时前
算法入门:滑动窗口--->找到字符串中所有的字母异位词,串联所有的子串,最小覆盖子串
数据库·redis·算法
滨HI02 小时前
C++ opencv简化轮廓
开发语言·c++·opencv
小青龙emmm2 小时前
2025级C语言第二次周测(国教专用)题解
c语言·开发语言·算法
学习路上_write2 小时前
FREERTOS_互斥量_创建和使用
c语言·开发语言·c++·stm32·单片机·嵌入式硬件
WolfGang0073213 小时前
代码随想录算法训练营Day28 | 509.斐波那契数列、70.爬楼梯、746.使用最小花费爬楼梯
算法
Boop_wu3 小时前
[Java EE] 多线程进阶(JUC)(2)
java·jvm·算法