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;
    }
相关推荐
一个不知名程序员www13 小时前
算法学习入门 --- 哈希表和unordered_map、unordered_set(C++)
c++·算法
C++ 老炮儿的技术栈13 小时前
在C++ 程序中调用被 C编译器编译后的函数,为什么要加 extern “C”声明?
c语言·c++·windows·git·vscode·visual studio
%xiao Q13 小时前
GESP C++五级-202406
android·开发语言·c++
Sarvartha14 小时前
C++ STL 栈的便捷使用
c++·算法
夏鹏今天学习了吗14 小时前
【LeetCode热题100(92/100)】多数元素
算法·leetcode·职场和发展
Aevget14 小时前
MFC扩展库BCGControlBar Pro v37.2 - 全新的VS 2026可视化管理器
c++·mfc·bcg·界面控件·ui开发
飞Link15 小时前
深度解析 MSER 最大稳定极值区域算法
人工智能·opencv·算法·计算机视觉
bubiyoushang88815 小时前
基于CLEAN算法的杂波抑制Matlab仿真实现
数据结构·算法·matlab
C+-C资深大佬15 小时前
C++类型判断
开发语言·c++
Yu_Lijing15 小时前
基于C++的《Head First设计模式》笔记——模式合作
c++·笔记·设计模式