day35|| 第八章 贪心算法 part03● 1005.K次取反后最大化的数组和 ● 134. 加油站● 135. 分发糖果

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

卡尔的思路我明白了,但我感觉我的可能更好理解吧。。。。。。

首先我先把数组排序,从小到大

走一个循环,如果前几个有负数,那我就消耗k,将前几个取反

走完以后,再次排序数组,有可能第一个数是正数,但是它是最小的,所以只操作它一个就行,消耗光k,如果是负的呢,那么它的绝对值是最大的,也是只对他操作,如果最后能取反,赚了,没取反没损失。

class Solution {
    public int largestSumAfterKNegations(int[] nums, int k) {
        Arrays.sort(nums);
        int sum = 0;
        for(int i =0;i<nums.length&&k>0;i++){
            if(nums[i]<0){
                nums[i] *= -1;
                k--;
            }
        }
        Arrays.sort(nums);
        k = k%2;
        nums[0] = k==0?nums[0]:-nums[0];
        for(int num:nums){
            sum+=num;
        }
        return sum;
    }
}

● 134. 加油站

class Solution {
    public int canCompleteCircuit(int[] gas, int[] cost) {
        int start =0;
        int cursum=0;
        int totalsum=0;
        for(int i =0;i<gas.length;i++){
            cursum+=(gas[i]-cost[i]);
            totalsum+=(gas[i]-cost[i]);
            if(cursum<0) {
                start=i+1;
                cursum=0;
            }
        }
        if(totalsum<0){
            return -1;
        }
        return start;
    }
}

● 135. 分发糖果

再好好想想,尤其是边界,是从前往后遍历还是从后往前遍历。

class Solution {
    public int candy(int[] ratings) {
        int[] nums = new int[ratings.length];
        Arrays.fill(nums,1);
        for(int i =1 ;i<nums.length;i++){
            if(ratings[i]>ratings[i-1]){
                nums[i] = nums[i-1]+1;
            }
        }
        for(int i = nums.length-2;i>=0;i--){
             if(ratings[i]>ratings[i+1]){
                nums[i] = Math.max(nums[i],nums[i+1]+1);
            }
        }
        int sum = 0;
        for(int num:nums){
            sum+=num;
        }
        return sum;
    }
}

 

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2024-06-15 11:36:05       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-15 11:36:05       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-15 11:36:05       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-15 11:36:05       18 阅读

热门阅读

  1. 【C++】开源项目收集

    2024-06-15 11:36:05       8 阅读
  2. Synchronized和ReentranLock区别

    2024-06-15 11:36:05       8 阅读
  3. **自动驾驶技术介绍**

    2024-06-15 11:36:05       7 阅读
  4. 小实战:结合AI作图完成一个新闻发布管理

    2024-06-15 11:36:05       10 阅读
  5. Nginx网站服务

    2024-06-15 11:36:05       8 阅读
  6. Web前端三大主流框架详解及应用

    2024-06-15 11:36:05       10 阅读
  7. C语言中的弱函数是什么?

    2024-06-15 11:36:05       9 阅读
  8. ESP8266发送WOL幻数据包实现电脑远程唤醒

    2024-06-15 11:36:05       10 阅读
  9. Unity3D MMORPG多玩家状态同步详解

    2024-06-15 11:36:05       8 阅读
  10. 在 macOS 上使用 Homebrew 安装和配置 Python 及 Tk 库

    2024-06-15 11:36:05       8 阅读
  11. ECharts 数据的视觉映射

    2024-06-15 11:36:05       8 阅读
  12. C++小游戏 合集

    2024-06-15 11:36:05       9 阅读
  13. XML 编辑器:功能、选择与使用技巧

    2024-06-15 11:36:05       9 阅读