首页 > 编程语言 >代码随想录第三十四天|贪心算法

代码随想录第三十四天|贪心算法

时间:2022-11-15 14:34:19浏览次数:69  
标签:ratings return nums int candyVec 随想录 第三十四 min 贪心

今天继续贪心算法,重点是学习贪心算法的思维

 

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

class Solution {
    public int largestSumAfterKNegations(int[] nums, int k) {
        int n = nums.length;
        Arrays.sort(nums);
        int i = 0;
        while(k>0 && i < n && nums[i] < 0){
            nums[i] = - nums[i];
            k--;
            i++;
        }
        
        if(k > 0 ){
            Arrays.sort(nums);
            if ((nums[0] != 0) && (k % 2 != 0)) {
                nums[0] = -nums[0];
            }
        }

        return Arrays.stream(nums).sum();




    }

尽量把所有负数都反转,次数过多的话就尽量把最小的数字变为负数

 

134. 加油站

class Solution {
    public int canCompleteCircuit(int[] gas, int[] cost) {
        int n = gas.length;
        int m = cost.length;

        if(Arrays.stream(gas).sum()< Arrays.stream(cost).sum()){
            return -1;
        }

        int cur = 0;
        int min = Integer.MAX_VALUE;

        for (int i = 0; i< n; i++){
            int rest = gas[i] - cost[i];
            cur += rest;
            if(cur < min){
                min = cur;
            }
        }
        if(cur < 0){
            return -1;
        }
        if(min >= 0){
            return 0;
        }

        for(int i=n - 1; i>=0; i--){
            int rest = gas[i] - cost[i];
            min += rest;
            if(min >= 0){
                return i;
            }
        }
        return -1;

    }
}

看是否车子所存的油能从i 开到 i+1

135. 分发糖果

class Solution {
    public int candy(int[] ratings) {
        int[] candyVec = new int[ratings.length];
        candyVec[0] = 1;
        for (int i = 1; i < ratings.length; i++) {
            if (ratings[i] > ratings[i - 1]) {
                candyVec[i] = candyVec[i - 1] + 1;
            } else {
                candyVec[i] = 1;
            }
        }

        for (int i = ratings.length - 2; i >= 0; i--) {
            if (ratings[i] > ratings[i + 1]) {
                candyVec[i] = Math.max(candyVec[i], candyVec[i + 1] + 1);
            }
        }

        int ans = 0;
        for (int s : candyVec) {
            ans += s;
        }
        return ans;
    }
}

左右两边都需要进行遍历对比

 

今天的困难题比较让人没有思路

标签:ratings,return,nums,int,candyVec,随想录,第三十四,min,贪心
From: https://www.cnblogs.com/catSoda/p/16892313.html

相关文章

  • 1710. 卡车上的最大单元数 ----- 贪心算法,自定义sort排序
    请你将一些箱子装在一辆卡车上。给你一个二维数组boxTypes,其中boxTypes[i]=[numberOfBoxesi,numberOfUnitsPerBoxi]:numberOfBoxesi是类型i的箱子的数量。numb......
  • 代码随想录Day23
    LeetCode110.平衡二叉树给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。......
  • 20221114_T4B_拓扑排序贪心
    题意L国正在举行各种会议,但是可怜的是L国只有一个主持人,每场会议的开始主持人都必须去主持会议,使会议得以开始,在会议开始后主持人可以离开。 主持人不会分身,他在一个时刻......
  • 代码随想录训练营第三十二天|贪心算法
    本来这是第三十一天的内容,但是三十一天的时候写成第三十二天的了,因此今天写第三十一天的内容 455.分发饼干 classSolution{publicintfindContentChildre......
  • 代码随想录算法训练营第十五天| 二叉树的层序遍历
    二叉树的层序遍历:https://leetcode.cn/problems/binary-tree-level-order-traversal/层序遍历使用队列实现:用size记录当前层的个数,size--控制弹出元素的个数,保证当前层的......
  • 20221113_T2A_背包贪心
    题意Steve的城堡正在被大量的怪物袭击。共有\(n\)个怪物正在袭击城堡,第\(i\)个怪物的攻击力为\(a_i\),防御力为\(b_i\)。城内有\(m\)个怪物猎人,第\(j\)个怪物......
  • 代码随想录训练营第三十一天 | 贪心算法
    贪心算法的核心思想是在每一步决策中都找到局部最优解122.买卖股票的最佳时机classSolution{publicintmaxProfit(int[]prices){intn=prices.le......
  • 贪心
    455.分发饼干假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子i,都有一个胃口值g[i],这是能让孩子们满足胃口的饼干的......
  • 代码随想录Day22
    LeetCode222.完全二叉树的节点个数 给出一个完全二叉树,求出该树的节点个数。示例1:输入:root=[1,2,3,4,5,6]输出:6示例2:输入:root=[]输出:0示例3:输入:ro......
  • 20221007_T1A-_贪心/树形dp
    题意给定一个树,求经过\(k\)个不同点所需要的步骤。以及给出一个方案。题解赛时得分:5/100不知道赛时哪里写错了。能想到找出以1开始的直径,直径上的点是必定会走的......