【随想录】Day34—第八章 贪心算法 part03

这篇具有很好参考价值的文章主要介绍了【随想录】Day34—第八章 贪心算法 part03。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


题目1: 1005. K 次取反后最大化的数组和

  • 题目链接:1005. K 次取反后最大化的数组和

1- 思路

贪心思路

    1. 先对数组中的元素进行排序
    1. 遍历数组,如果 当前遍历的位置值 < 0 && k>0 直接变号,之后对 k 进行 --
    1. 如果不小于 0,此时需要先排序,判断 k 是否为奇数,如果是奇数直接对最小位进行取反
    1. 最终遍历数组求和

2- 题解

⭐ K 次取反后最大化的数组和 ——题解思路

【随想录】Day34—第八章 贪心算法 part03,算法,贪心算法,算法

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

题目2: 134. 加油站

  • 题目链接:134. 加油站

1- 思路

贪心:每到一个站点后,此时是有补充有消耗的,关注点:当前还剩余多少油。
贪心思路

  • ① 求两个数组的差值,记录为curSum
  • ② 遍历 gas 数组
    • 如果 totalSum一直大于零可以直接遍历
    • 如果 totalSum 出现小于 0 的情况,此时 重置和从下一个起点为开始点进行遍历

代码实现

  • 1. 数据结构
    • curSum:统计从头开始每一站的剩余油量和
    • totalSum:对每站的剩余油量进行求和
    • satrt:记录每次遍历的起始站点下标
  • 2. 遍历 gas 数组
    • 此时如果 curSum > 0 此时 继续遍历,同时利用 totalSum记录和
    • 此时如果 curSum < 0 此时 重置 satrttotalSum
    • 最终如果 totalSum<0 则直接返回 -1 表示不能到达

2- 题解

⭐ 加油站 ——题解思路

【随想录】Day34—第八章 贪心算法 part03,算法,贪心算法,算法

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

题目3: 135. 分发糖果

  • 题目链接:135. 分发糖果

1- 思路

贪心思路

  • ① 初始化分发情况数组
  • ② 从前向后遍历,此时判断右边比左边大的情况
  • ③ 从后向前遍历,此时判断左边比右边大的情况
  • 难点:从前往后遍历 先对 分发数组 初始化,此后 从后向前 遍历时,大的那个位置的值应该为 步骤② 和 步骤③中元素的最大值。

2- 题解

⭐ 分发糖果 ——题解思路

【随想录】Day34—第八章 贪心算法 part03,算法,贪心算法,算法文章来源地址https://www.toymoban.com/news/detail-859669.html

class Solution {
    public int candy(int[] ratings) {
        int[] candies = new int[ratings.length];
        candies[0] = 1;

        for (int i = 1; i < ratings.length; i++) {
            if (ratings[i] > ratings[i - 1]) {
                candies[i] = candies[i - 1] + 1;
            }else{
                candies[i] = 1;
            }
        }

        for(int j = ratings.length-1;j>=1;j--){
            if(ratings[j]<ratings[j-1]){
                candies[j-1] = Math.max(candies[j]+1,candies[j-1]);
            }
        }

        int res = 0;
        for(int r:candies){
            res+=r;
        }
        return res;
    }
}

到了这里,关于【随想录】Day34—第八章 贪心算法 part03的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 代码随想录——贪心算法

    代码随想录——回溯 代码随想录——贪心算法 分发饼干 链接:https://leetcode.cn/problems/assign-cookies/description/ 这道题我自己一开始的想法是从大到小遍历孩子数组,对于每个元素从大到小遍历饼干数组,满足则total+1,并且该元素置0防止被再次使用。这样虽然是可以的,但时间复

    2024年02月22日
    浏览(57)
  • 代码随想录day24 开启回溯算法

    感觉回溯算法其实和递归很像,也是用递归的做法,也有三部曲,但又不太一样的地方是递归中类似二叉树,只有纵向遍历(一层层往下遍历,没有横向遍历),而回溯算法中多的for循环就是横向遍历,说实话这一点我没有理解的太深,只是知道它类似于两个for循环中的第一

    2024年01月16日
    浏览(53)
  • 代码随想录算法训练DAY25|回溯2

    力扣题目链接 找出所有相加之和为 n 的 k 个数的组合。组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字。 说明: 所有数字都是正整数。 解集不能包含重复的组合。 示例 1: 输入: k = 3, n = 7 输出: [[1,2,4]] 示例 2: 输入: k = 3, n = 9 输出: [[1,2,6], [1,3,5], [2,3,4]

    2024年01月22日
    浏览(63)
  • 代码随想录算法训练day4 | 链表

    目录 24. 两两交换链表节点 19. 删除链表倒数第n个节点 方法一:普通写法 方法二:双指针法 面试题:找链表相交节点 142. 判断环形链表 虚拟头节点的本质意义在于减少了特殊情况的处理。不用判断该节点是否在链表的第一位。 定义快慢两个指针。 fast先走n步,再让fast和s

    2024年02月04日
    浏览(67)
  • 代码随想录算法训练DAY27|回溯3

    力扣题目链接 给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的数字可以无限制重复被选取。 说明: 所有数字(包括 target)都是正整数。 解集不能包含重复的组合。 示例 1: 输入:candidates = [2,3,6,

    2024年01月23日
    浏览(58)
  • 代码随想录算法练习Day1:二分查找

    题目链接:704. 二分查找 卡哥视频讲解:手把手带你撕出正确的二分法 | 二分查找法 | 二分搜索法 | LeetCode:704. 二分查找 二分法概述: 二分法(Binary Search)是一种在有序数组或列表中查找目标元素的算法。 二分法使用前提 : 有序数组或列表 :二分法要求在查找的数据结

    2024年04月23日
    浏览(58)
  • 代码随想录Day20 回溯算法 LeetCode77 组合问题

    以下内容更详细解释来自于:代码随想录 (programmercarl.com) 回溯法也叫回溯搜索法,是搜索法的一种,我们之前在二叉树中也经常使用到回溯来解决问题,其实 有递归就有回溯 ,有的时候回溯隐藏在递归之下,我们不容易发觉,今天我们来详细介绍一下什么是回溯,它能解决哪些问题.

    2024年02月08日
    浏览(54)
  • 代码随想录打卡第34天

    2024年02月11日
    浏览(89)
  • 【一天三道算法题】代码随想录——Day15(困难题只有一道)

    一. 滑动窗口最大值 题目链接:力扣 思路:         这道题我认为最难的是编程语言本身并没有一个可以让你完全直接开始使用的一个数据结构,也就是说要自己造轮子。并且为了尽可能的减少维护元素的个数我们要学会去在能实现功能的前提下,维护尽可能少的数组元

    2024年02月15日
    浏览(46)
  • 【代码随想录python笔记整理】第八课 · 奇怪的信

    前言: 本笔记仅仅只是对内容的整理和自行消化,并不是完整内容,如有侵权,联系立删。        在之前的算术运算中,我们遇到了一种曾经不常见的运算——取模。接下来,我们就通过这道题目来理解一下取模的作用。        对于这道题目我们其实有两种角度。第一种

    2024年02月22日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包