代码随想录第34天: 贪心part03

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

class Solution {
    public int largestSumAfterKNegations(int[] nums, int k) {
        // 将基本类型的int数组转换成IntStream,以便进行流操作。
        nums = Arrays.stream(nums)
            // 将IntStream中的int元素转换(装箱)为Integer对象,这是必须的因为后面的sorted方法需要对象来进行比较。
            .boxed()
            // 对流中的元素进行排序。使用自定义的比较器,该比较器基于元素的绝对值进行降序排序。
            // o1和o2是比较的两个元素,Math.abs(o2) - Math.abs(o1)计算结果如果为正数,则o2排在o1前面,实现降序。
            .sorted((o1, o2) -> Math.abs(o2) - Math.abs(o1))
            // 将流中的Integer对象转换回基本类型int,以便可以将流转换回数组。
            .mapToInt(Integer::intValue)
            // 将流中的元素收集到一个新的int数组中。
            .toArray();

        for(int i = 0; i < nums.length && k > 0; i++) {
            if(nums[i] < 0) {
                nums[i] = nums[i] * -1;
                k--;
            }
        }
        if(k == 0 || k % 2 == 0) {
            return Arrays.stream(nums).sum();
        }
        else {
            nums[nums.length - 1] = nums[nums.length - 1] * -1;
            return Arrays.stream(nums).sum();
        }    
    

    }
}

力扣 134. 加油站

class Solution {
    public int canCompleteCircuit(int[] gas, int[] cost) {
        int[] res = new int[gas.length];
        for(int i = 0; i < gas.length; i++) {
            res[i] = gas[i] - cost[i];
        }
        if(Arrays.stream(res).sum() < 0) {
            return -1;
        }
        else {
            int idx = 0;
            int sum = 0;
            while(idx < res.length) {
                int i;
                for(i = idx; i < res.length; i++) {
                    sum += res[i];
                    if(sum < 0) {
                        sum = 0;
                        idx = i + 1;
                        break;
                    }
                }
                if(i == res.length) return idx;
            }
        }
        return -1;
    }
}

力扣 135. 分发糖果

class Solution {
    public int candy(int[] ratings) {
        int[] LToR = new int[ratings.length];
        LToR[0] = 1;
        for(int i = 1; i < ratings.length; i++) {
            if(ratings[i] > ratings[i - 1]) {
                LToR[i] = LToR[i - 1] + 1;
            }
            else {
                LToR[i] = 1;
            }
        }
        int[] RToL = new int[ratings.length];
        RToL[ratings.length - 1] = 1;
        for(int i = ratings.length - 2; i >= 0; i--) {
            if(ratings[i] > ratings[i + 1]) {
                RToL[i] = RToL[i + 1] + 1;
            }
            else {
                RToL[i] = 1;
            }
        }
        int[] result = new int[ratings.length];
        for(int i = 0; i < ratings.length; i++) {
            result[i] = Math.max(LToR[i], RToL[i]);
        }
        int sum = Arrays.stream(result).sum();
        return sum;

    }
}

相关推荐

  1. 代码随想34: 贪心part03

    2024-04-25 16:34:04       13 阅读
  2. 代码随想 day32 八章 贪心算法 part02

    2024-04-25 16:34:04       18 阅读
  3. 代码随想 链表Part02

    2024-04-25 16:34:04       20 阅读
  4. 代码随想十六: 二叉树part03

    2024-04-25 16:34:04       14 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-25 16:34:04       17 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-25 16:34:04       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-25 16:34:04       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-25 16:34:04       18 阅读

热门阅读

  1. 济南软件企业认定标准

    2024-04-25 16:34:04       13 阅读
  2. 前端中的同步和异步任务详细说明

    2024-04-25 16:34:04       16 阅读
  3. C#WPF通过串口(232协议)调用基恩士打标机进行打标

    2024-04-25 16:34:04       10 阅读
  4. 常用的 Spring Boot 注解及其作用

    2024-04-25 16:34:04       13 阅读
  5. 英语语法速成(4)

    2024-04-25 16:34:04       12 阅读
  6. 李沐63_束搜索——自学笔记

    2024-04-25 16:34:04       14 阅读
  7. 用Python搭建一个猜数字小游戏

    2024-04-25 16:34:04       15 阅读
  8. - 实际案例演示Single-Spa的使用步骤

    2024-04-25 16:34:04       11 阅读
  9. C++人工智能程序01A版本

    2024-04-25 16:34:04       14 阅读
  10. uniapp实现相册、拍照及视频录制功能

    2024-04-25 16:34:04       13 阅读