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

大纲

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

● 134. 加油站

● 135. 分发糖果

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

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

题目:

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

复制代码
// 排序函数,按照绝对值从小到大排序
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;
    }
相关推荐
码流怪侠8 分钟前
2026年8月GitHub热榜深度拆解:Agent Skills席卷开源圈,一个“技能包“收割5万星
算法·程序员·github
hold?fish:palm11 分钟前
30 两两交换链表中的节点
数据结构·算法·链表
Nil20821 分钟前
leetcode 98验证二叉搜索树
算法·leetcode·职场和发展
不正经学生41 分钟前
C语言结构体:自定义数据类型,让变量打包出行
java·c语言·开发语言·数据结构·算法
加油码1 小时前
动静态库的链接底层原理(进阶版)
linux·c++
一木 之林1 小时前
三、内存管理、指针与堆栈
c语言·jvm·c++
cxr8281 小时前
数学的本质:关系、模式与不变量的结构世界
人工智能·算法·机器学习
初夏睡觉2 小时前
原创题目 - 空壳恋爱
c++·算法·dp·oi·信息学·原创题目·值得挑战的题目
间歇性努力持续性发呆的野生快乐选手3 小时前
stl容器使用和算法简介
数据结构·c++
Buke..3 小时前
【APP 逆向】哔哩哔哩 sign 参数逆向(下):OLLVM 混淆还原 sign 算法
java·javascript·爬虫·python·算法