• 代码随想录二刷 Day36


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

    那么本题的解题步骤为:

    • 第一步:将数组按照绝对值大小从大到小排序,注意要按照绝对值的大小
    • 第二步:从前向后遍历,遇到负数将其变为正数,同时K--
    • 第三步:如果K还大于0,那么反复转变数值最小的元素,将K用完
    • 第四步:求和

    这个题的sort部分写法不会进行绝对值排序;

    1. class Solution {
    2. static bool cmp(int a, int b) {
    3. return abs(a) > abs(b);
    4. }
    5. public:
    6. int largestSumAfterKNegations(vector<int>& nums, int k) {
    7. sort(nums.begin(), nums.end(), cmp);
    8. for( int i = 0; i< nums.size(); i++) {
    9. if (nums[i] < 0 && k > 0){
    10. nums[i] = -nums[i];
    11. k--;
    12. }
    13. }
    14. sort(nums.begin(), nums.end());
    15. while (k > 0) {
    16. nums[0] = - nums[0];
    17. k--;
    18. }
    19. int result = 0;
    20. for (int j = 0; j < nums.size(); j++){
    21. result += nums[j];
    22. }
    23. return result;
    24. }
    25. };

    134. 加油站

    首先如果总油量减去总消耗大于等于零那么一定可以跑完一圈,说明 各个站点的加油站 剩油量rest[i]相加一定是大于等于零的。

    1. class Solution {
    2. public:
    3. int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {
    4. //vector rest();这么写不对,因为定义了一个vector但是没往里面插入数,所以下面会接触空vector
    5. vector<int> rest(gas.size());
    6. int current_sum = 0;
    7. int start_position = 0;
    8. int total_sum = 0;
    9. for (int i = 0; i < gas.size(); i++) {
    10. rest[i] = gas[i] - cost[i];
    11. total_sum += rest[i];
    12. }
    13. if (total_sum < 0) return -1;
    14. for( int j = 0; j < rest.size(); j++) {
    15. current_sum += rest[j];
    16. if (current_sum <0) {
    17. start_position = j+1;
    18. current_sum = 0;
    19. }
    20. }
    21. return start_position;
    22. }
    23. };

    135. 分发糖果

    1. class Solution {
    2. public:
    3. int candy(vector<int>& ratings) {
    4. vector<int> candy_number(ratings.size(), 1);
    5. for (int i = 1; i < ratings.size(); i++) { //注意这句要从1开始
    6. if (ratings[i] > ratings[i - 1]) candy_number[i] = candy_number[i -1] + 1;
    7. }
    8. for (int i = ratings.size() - 2; i >= 0; i--) { //注意这句从减2开
    9. if (ratings[i] > ratings[i + 1]) candy_number[i] = max(candy_number[i], candy_number[i + 1] + 1);
    10. }
    11. int result = 0;
    12. for (int i = 0; i < candy_number.size(); i++ ){
    13. result += candy_number[i];
    14. }
    15. return result;
    16. }
    17. };

  • 相关阅读:
    OceanBase 分布式数据库【信创/国产化】- OceanBase 概述
    2024年腾讯云8核16G18M服务器租用价格1668元15个月
    【Docker】基于Dockerfile构建镜像介绍
    [ubuntu]server网络配置
    初学者使用R语言读取excel/csv/txt的注意事项
    6. 史上最全——【图的基本概念】
    使用 乐天 / V-IM 作为网页即时聊天
    物联网工业串口转WiFi模块 无线路由WiFi模块的选型
    todolist案列——vue脚手架(完整版)
    letax环境过程记录 20220831
  • 原文地址:https://blog.csdn.net/weixin_43908951/article/details/133852927