![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
贪心算法
文章平均质量分 59
贪心算法
向光.
路过人间,绝非一瞬间.
展开
-
LeetCode.302 场周赛___02_6164. 数位和相等数对的最大和___哈希 + 增强预处理 + 自定义优先队列
给你一个下标从0开始的数组nums,数组中的元素都是正整数。=j),且nums[i]的数位和与nums[j]的数位和相等。,因此我们可以对可以产生的每一种数位和都进行提前预处理,使得每一个产生的数位和直接对应一个长度为2的最大优先队列,请你找出所有满足条件的下标i和j,找出并返回nums[i]+nums[j]可以得到的最大值。输入nums=[18,43,36,13,7]输入nums=[10,12,19,14]由于我们不在乎数位和的大小,只在乎找到。......原创 2022-07-17 12:48:48 · 151 阅读 · 0 评论 -
LeetCode.1217. 玩筹码____简单贪心
有 n 个筹码。第 i 个筹码的位置是 position[i] 。我们需要把所有筹码移到同一个位置。在一步中,我们可以将第 i 个筹码的位置从 position[i] 改变为:返回将所有筹码移动到同一位置上所需要的 最小代价 。提示:由题意能移动两格距离就移动两格距离,因为这样不用花费任何成本,所以根据偶数原则,一定能将所有的筹码都移动到1,2位置处,最后再取1,2中哪个少移动到另一个位置即可保证成本最小。...原创 2022-07-13 14:40:58 · 148 阅读 · 0 评论 -
LeetCode__301场周赛.6112. 装满杯子需要的最短总时长___贪心两法
现有一台饮水机,可以制备冷水、温水和热水。每秒钟,可以装满 2 杯 不同 类型的水或者 1 杯任意类型的水。给你一个下标从 0 开始、长度为 3 的整数数组 amount ,其中 amount[0]、amount[1] 和 amount[2] 分别表示需要装满冷水、温水和热水的杯子数量。返回装满所有杯子所需的 最少 秒数。示例 1:示例 2:示例 3:提示:一开始认为冷水温水热水之间是有差异性的,所以就一直维护冷、温、热 三个状态的有序性,即维护amount数组三个位置的含义不变。所以即每次按照贪心,先取最原创 2022-07-12 20:01:46 · 363 阅读 · 0 评论 -
Leetcode周赛_5972. 统计隐藏数组数目__贪心
5972. 统计隐藏数组数目给你一个下标从 0 开始且长度为 n 的整数数组 differences ,它表示一个长度为 n + 1 的 隐藏 数组 相邻 元素之间的 差值 。更正式的表述为:我们将隐藏数组记作 hidden ,那么 differences[i] = hidden[i + 1] - hidden[i] 。同时给你两个整数 lower 和 upper ,它们表示隐藏数组中所有数字的值都在 闭 区间 [lower, upper] 之间。比方说,differences = [1, -3, 4原创 2022-01-23 11:06:59 · 153 阅读 · 0 评论 -
Leetcode.1332. 删除回文子序列__贪心
1332. 删除回文子序列给你一个字符串 s,它仅由字母 ‘a’ 和 ‘b’ 组成。每一次删除操作都可以从 s 中删除一个回文 子序列。返回删除给定字符串中所有字符(字符串为空)的最小删除次数。「子序列」定义:如果一个字符串可以通过删除原字符串某些字符而不改变原字符顺序得到,那么这个字符串就是原字符串的一个子序列。「回文」定义:如果一个字符串向后和向前读是一致的,那么这个字符串就是一个回文。示例 1:输入:s = "ababa"输出:1解释:字符串本身就是回文序列,只需要删除一次。示例原创 2022-01-23 10:52:22 · 167 阅读 · 0 评论 -
Leetcode.747. 至少是其他数字两倍的最大数__哈希+贪心
747. 至少是其他数字两倍的最大数给你一个整数数组 nums ,其中总是存在 唯一的 一个最大整数 。请你找出数组中的最大元素并检查它是否 至少是数组中每个其他数字的两倍 。如果是,则返回 最大元素的下标 ,否则返回 -1 。示例 1:输入:nums = [3,6,1,0]输出:1解释:6 是最大的整数,对于数组中的其他整数,6 至少是数组中其他元素的两倍。6 的下标是 1 ,所以返回 1 。示例 2:输入:nums = [1,2,3,4]输出:-1解释:4 没有超过 3 的两倍大原创 2022-01-15 16:08:21 · 102 阅读 · 0 评论 -
Leetcode.334. 递增的三元子序列__从暴力到贪心/双向查找
334. 递增的三元子序列给你一个整数数组 nums ,判断这个数组中是否存在长度为 3 的递增子序列。如果存在这样的三元组下标 (i, j, k) 且满足 i < j < k ,使得 nums[i] < nums[j] < nums[k] ,返回 true ;否则,返回 false 。示例 1:输入:nums = [1,2,3,4,5]输出:true解释:任何 i < j < k 的三元组都满足题意示例 2:输入:nums = [5,4,3,2,1]原创 2022-01-12 22:25:42 · 376 阅读 · 0 评论 -
Leetcode.1005. K 次取反后最大化的数组和——贪心+计数排序
12.6 每日一题——K 次取反后最大化的数组和输入一个整数数组和一个整数k,按以下方式修改该数组1.选择某个下标 i 并将 nums[i] 替换为 -nums[i]2.重复这个过程恰好 k 次。可以多次选择同一个下标 i 。以这种方式修改数组后,返回数组可能的最大和 。(这次还是交博客链接)输入:nums = [4,2,3], k = 1输出:5解释:选择下标 1 ,nums 变为 [4,-2,3] 。输入:nums = [3,-1,0,2], k = 3输出:6输入:nums =原创 2021-12-06 21:55:20 · 92 阅读 · 0 评论 -
Leetcode.300. 最长递增子序列---DP问题/贪心+二分
300. 最长递增子序列给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。示例 1:输入:nums = [10,9,2,5,3,7,101,18]输出:4解释:最长递增子序列是 [2,3,7,101],因此长度为 4 。示例 2:输入:nums = [0,1,0,3,2,3]输出:4示例 3:输入:nums =原创 2021-11-21 15:30:23 · 137 阅读 · 0 评论 -
Lintcode.1907 · 数组游戏---贪心+逆向思维
1907 · 数组游戏描述:给定一个整数数组,请算出让所有元素相同的最小步数。每一步你可以选择一个元素,使得其他元素全部加1。样例样例 1输入: [3, 4, 6, 6, 3]输出: 7说明: [3, 4, 6, 6, 3] -> [4, 5, 7, 6, 4] -> [5, 6, 7, 7, 5] -> [6, 7, 8, 7, 6] -> [7, 8, 8, 8, 7] -> [8, 9, 9, 8, 8] -> [9, 9, 10, 9, 9]原创 2021-10-09 15:12:54 · 3199 阅读 · 0 评论 -
Leetcode.881. 救生艇---双指针+贪心
881. 救生艇第 i 个人的体重为 people[i],每艘船可以承载的最大重量为 limit。每艘船最多可同时载两人,但条件是这些人的重量之和最多为 limit。返回载到每一个人所需的最小船数。(保证每个人都能被船载)。示例 1:输入:people = [1,2], limit = 3输出:1解释:1 艘船载 (1, 2)示例 2:输入:people = [3,2,2,1], limit = 3输出:3解释:3 艘船分别载 (1, 2), (2) 和 (3)示例 3:输入原创 2021-09-27 21:59:14 · 123 阅读 · 0 评论 -
Leetcode.789.逃脱阻碍者---贪心+数学
789. 逃脱阻碍者你在进行一个简化版的吃豆人游戏。你从 [0, 0] 点开始出发,你的目的地是 target = [xtarget, ytarget] 。地图上有一些阻碍者,以数组 ghosts 给出,第 i 个阻碍者从 ghosts[i] = [xi, yi] 出发。所有输入均为 整数坐标 。每一回合,你和阻碍者们可以同时向东,西,南,北四个方向移动,每次可以移动到距离原位置 1 个单位 的新位置。当然,也可以选择 不动 。所有动作 同时 发生。如果你可以在任何阻碍者抓住你 之前 到达目的地(阻碍原创 2021-09-18 18:53:35 · 114 阅读 · 0 评论 -
Leetcode.1877. 数组中最大数对和的最小值---排序+贪心
1877. 数组中最大数对和的最小值一个数对 (a,b) 的 数对和 等于 a + b 。最大数对和 是一个数对数组中最大的 数对和 。比方说,如果我们有数对 (1,5) ,(2,3) 和 (4,4),最大数对和 为 max(1+5, 2+3, 4+4) = max(6, 5, 8) = 8 。给你一个长度为 偶数 n 的数组 nums ,请你将 nums 中的元素分成 n / 2 个数对,使得:nums 中每个元素 恰好 在 一个 数对中,且最大数对和 的值 最小 。请你在最优数对划分的方案下原创 2021-07-20 20:21:30 · 134 阅读 · 0 评论 -
leetcode.1846. 减小和重新排列数组后的最大元素---排序+贪心
1846. 减小和重新排列数组后的最大元素给你一个正整数数组 arr 。请你对 arr 执行一些操作(也可以不进行任何操作),使得数组满足以下条件:arr 中 第一个 元素必须为 1 。 任意相邻两个元素的差的绝对值 小于等于 1 ,也就是说,对于任意的 1 <= i <arr.length (数组下标从 0 开始),都满足 abs(arr[i] - arr[i - 1]) <= 1 。abs(x) 为 x 的绝对值。 你可以执行以下 2 种操作任意次:减小 arr 中任意元素的原创 2021-07-15 11:12:27 · 116 阅读 · 0 评论 -
leetcode.1833. 雪糕的最大数量---贪心思想+直接排序/桶排序
1833. 雪糕的最大数量夏日炎炎,小男孩 Tony 想买一些雪糕消消暑。商店中新到 n 支雪糕,用长度为 n 的数组 costs 表示雪糕的定价,其中 costs[i] 表示第 i 支雪糕的现金价格。Tony 一共有 coins 现金可以用于消费,他想要买尽可能多的雪糕。给你价格数组 costs 和现金量 coins ,请你计算并返回 Tony 用 coins 现金能够买到的雪糕的 最大数量 。注意:Tony 可以按任意顺序购买雪糕。示例 1:输入:costs = [1,3,2,4,1]原创 2021-07-05 22:40:38 · 112 阅读 · 0 评论 -
力扣1403. 非递增顺序的最小子序列(贪心算法直达最优解)
1403. 非递增顺序的最小子序列给你一个数组 nums,请你从中抽取一个子序列,满足该子序列的元素之和 严格 大于未包含在该子序列中的各元素之和。如果存在多个解决方案,只需返回 长度最小 的子序列。如果仍然有多个解决方案,则返回 元素之和最大 的子序列。与子数组不同的地方在于,「数组的子序列」不强调元素在原数组中的连续性,也就是说,它可以通过从数组中分离一些(也可能不分离)元素得到。注意,题目数据保证满足所有约束条件的解决方案是 唯一 的。同时,返回的答案应当按 非递增顺序 排列。示例 1:原创 2021-03-20 23:13:03 · 217 阅读 · 0 评论 -
力扣680. 验证回文字符串 Ⅱ---双指针查找(暴力法与贪心法)
680. 验证回文字符串 Ⅱ给定一个非空字符串 s,最多删除一个字符。判断是否能成为回文字符串。示例 1:输入: “aba”输出: True示例 2:输入: “abca”输出: True解释: 你可以删除c字符。注意:字符串只包含从 a-z 的小写字母。字符串的最大长度是50000。题解:方法一:双指针搜索与暴力因为题目为“最多删除一个”,所以我们可以先看一下一个不删除的情况的时,他是不是一个回文字符串。若是直接返回1,不是的话开始进行“删除”的操作。根据暴力法,不用思考太多原创 2021-01-07 19:37:28 · 151 阅读 · 0 评论 -
力扣714. 买卖股票的最佳时机含手续费---动态规划把握全局
714. 买卖股票的最佳时机含手续费给定一个整数数组 prices,其中第 i 个元素代表了第 i 天的股票价格 ;非负整数 fee 代表了交易股票的手续费用。你可以无限次地完成交易,但是你每笔交易都需要付手续费。如果你已经购买了一个股票,在卖出它之前你就不能再继续购买股票了。返回获得利润的最大值。注意:这里的一笔交易指买入持有并卖出股票的整个过程,每笔交易你只需要为支付一次手续费。示例 1:输入: prices = [1, 3, 2, 8, 4, 9], fee = 2输出: 8解释: 能原创 2021-01-03 12:15:07 · 150 阅读 · 0 评论 -
力扣 122. 买卖股票的最佳时机 II--纯粹的贪心
122. 买卖股票的最佳时机 II给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例 1:输入: [7,1,5,3,6,4]输出: 7解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。随后,在第 4 天(股票价格 = 3)的时候原创 2021-01-02 21:43:10 · 98 阅读 · 0 评论 -
力扣1221. 分割平衡字符串---变量储存+贪心策略逐步优化
1221. 分割平衡字符串在一个「平衡字符串」中,‘L’ 和 ‘R’ 字符的数量是相同的。给出一个平衡字符串 s,请你将它分割成尽可能多的平衡字符串。返回可以通过分割得到的平衡字符串的最大数量。示例 1:输入:s = “RLRRLLRLRL”输出:4解释:s 可以分割为 “RL”, “RRLL”, “RL”, “RL”, 每个子字符串中都包含相同数量的 ‘L’ 和 ‘R’。示例 2:输入:s = “RLLLLRRRLR”输出:3解释:s 可以分割为 “RL”, “LLLRRR”, “L原创 2021-01-02 12:55:53 · 139 阅读 · 0 评论 -
力扣435.无重叠区间----贪心策略三法(一暴力贪心,一优化验证过程,一另辟蹊径反面思考)
int cmp(void*_x,void*_y){int x=(int**)_x;int y=(int**)_y;return x[1]>y[1];}int eraseOverlapIntervals(int** intervals, int intervalsSize, int* intervalsColSize){if(intervalsSize==0)return 0;int sum = 0;qsort(intervals,intervalsSize,sizeof(int*)原创 2020-12-31 16:48:50 · 304 阅读 · 0 评论 -
力扣 1353. 最多可以参加的会议数目两法--遍历贪心与剪枝优化
1353. 最多可以参加的会议数目给你一个数组 events,其中 events[i] = [startDayi, endDayi] ,表示会议 i 开始于 startDayi ,结束于 endDayi 。你可以在满足 startDayi <= d <= endDayi 中的任意一天 d 参加会议 i 。注意,一天只能参加一个会议。请你返回你可以参加的 最大 会议数目。示例 1:输入:events = [[1,2],[2,3],[3,4]]输出:3解释:你可以参加所有的三个会议。原创 2020-12-30 14:43:47 · 395 阅读 · 0 评论 -
力扣860. 柠檬水找零--贪心策略
860. 柠檬水找零在柠檬水摊上,每一杯柠檬水的售价为 5 美元。顾客排队购买你的产品,(按账单 bills 支付的顺序)一次购买一杯。每位顾客只买一杯柠檬水,然后向你付 5 美元、10 美元或 20 美元。你必须给每个顾客正确找零,也就是说净交易是每位顾客向你支付 5 美元。注意,一开始你手头没有任何零钱。如果你能给每位顾客正确找零,返回 true ,否则返回 false 。示例 1:输入:[5,5,5,10,20]输出:true解释:前 3 位顾客那里,我们按顺序收取 3 张 5 美原创 2020-12-29 14:25:22 · 182 阅读 · 0 评论 -
力扣1217.玩筹码---理解题意逐步贪心
1217. 玩筹码数轴上放置了一些筹码,每个筹码的位置存在数组 chips 当中。你可以对 任何筹码 执行下面两种操作之一(不限操作次数,0 次也可以):将第 i 个筹码向左或者右移动 2 个单位,代价为 0。将第 i 个筹码向左或者右移动 1 个单位,代价为 1。最开始的时候,同一位置上也可能放着两个或者更多的筹码。返回将所有筹码移动到同一位置(任意位置)上所需要的最小代价。示例 1:输入:chips = [1,2,3]输出:1解释:第二个筹码移动到位置三的代价是 1,第一个筹码移动到原创 2020-12-28 15:32:01 · 223 阅读 · 0 评论 -
力扣换酒问题---基础贪心算法
1518. 换酒问题小区便利店正在促销,用 numExchange 个空酒瓶可以兑换一瓶新酒。你购入了 numBottles 瓶酒。如果喝掉了酒瓶中的酒,那么酒瓶就会变成空的。请你计算 最多 能喝到多少瓶酒。示例 1:输入:numBottles = 9, numExchange = 3输出:13解释:你可以用 3 个空酒瓶兑换 1 瓶酒。所以最多能喝到 9 + 3 + 1 = 13 瓶酒。示例 2:输入:numBottles = 15, numExchange = 4输出:19解原创 2020-12-28 14:42:28 · 296 阅读 · 0 评论 -
力扣分发饼干问题
455. 分发饼干假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j,都有一个尺寸 s[j] 。如果 s[j] >= g[i],我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。示例 1:输入: g = [1,2,3], s = [1,1]输出: 1解释:你有三个孩子和两块小饼干,3个孩子原创 2020-12-25 14:24:29 · 287 阅读 · 4 评论 -
力扣605.种花问题--贪心算法
**题目**假设你有一个很长的花坛,一部分地块种植了花,另一部分却没有。可是,花卉不能种植在相邻的地块上,它们会争夺水源,两者都会死去。给定一个花坛(表示为一个数组包含0和1,其中0表示没种植花,1表示种植了花),和一个数 n 。能否在不打破种植规则的情况下种入 n 朵花?能则返回True,不能则返回False。示例 1:输入: flowerbed = [1,0,0,0,1], n = 1输出: True示例 2:输入: flowerbed = [1,0,0,0,1], n = 2输出:原创 2020-12-24 14:04:20 · 689 阅读 · 0 评论 -
2018年蓝桥杯第九届省赛b组第四题--测试次数
先看一些简单的东西。当手机个数为2时,前几层比较好计算。而当层数为4时,对于2部手机,有以下情况:左边的1,2,3,4为代表第一次从第几层开始扔,由于题目要求,“最差运气”,“最佳策略”,所以由此可知,最佳策略即从以上第一次分别第几层扔的四种方法里找一个次数最少的,而最差运气又使每一个策略我都只能保存下来次数最多的那个,即不会出现类似“一步到位”的情况。所以二者结合便是为在四种策略的每个策略的最大次数里找其中最小的次数,即为在蓝色文字中找次数最少的。并且注意的是动态规划就是一种递推问题,所以意原创 2020-12-21 22:00:28 · 934 阅读 · 1 评论 -
LeetCode.452. 用最少数量的箭引爆气球_____贪心
对于每个气球,提供的输入是水平方向上,气球直径的开始和结束坐标。解释对于该样例,x=6可以射爆[2,8],[1,6]两个气球,以及x=11射爆另外两个气球。输入points=[[10,16],[2,8],[1,6],[7,12]]输入points=[[1,2],[3,4],[5,6],[7,8]]输入points=[[1,2],[2,3],[3,4],[4,5]]输入points=[[2,3],[2,3]]输入points=[[1,2]]......原创 2020-11-23 20:26:26 · 121 阅读 · 0 评论