
贪心
csu_xiji
这个作者很懒,什么都没留下…
展开
-
力扣 678. 有效的括号字符串 贪心
https://leetcode-cn.com/problems/valid-parenthesis-string/思路:星号既可以匹配左括号也可以匹配右括号,由此可以记录从起始位置到当前位置的左括号的最大值和最小值,在更新过程中最大值不能低于0,且最小值不能小于0。当遍历完成后,最小值应该等于0。class Solution {public: bool checkValidString(string s) { int maxBrackets=0,minBrackets=0;原创 2021-09-15 00:52:22 · 202 阅读 · 0 评论 -
力扣 881. 救生艇 贪心 双指针
https://leetcode-cn.com/problems/boats-to-save-people/思路:贪心,我们从体重低的开始考虑,因为一艘船最多可以坐两个人,因此体重低的人应该尽可能的带一个体重最大的人,如果不满足重量限制,那么只能让体重最大的人单独一艘船了。class Solution {public: int numRescueBoats(vector<int>& people, int limit) { sort(people.begi原创 2021-08-27 01:21:29 · 163 阅读 · 0 评论 -
力扣 5835. 最大方阵和 思维+贪心
https://leetcode-cn.com/problems/maximum-matrix-sum/思路:可恶啊,居然被这道题卡了。对于矩阵中任意两个坐标,我们可以找到一条从起始坐标到终止坐标的路径,那么对这条路径上所有相邻点做一次操作,最后的结果就是起始位置和终止位置的值取反,其余值不变。想到这一点就比较好做了,我们可以使用这种方式让所有的负数成对内耗掉,根据贪心想法自然要从小到大开始。需要注意的一点是如果负数的个数是奇数个,那么最终会剩下一个最大的负数没有被消耗掉。此时我们有两种选择:不做任原创 2021-08-22 00:28:08 · 142 阅读 · 0 评论 -
力扣 1713. 得到子序列的最少操作次数 贪心 哈希 LCS转LIS
https://leetcode-cn.com/problems/minimum-operations-to-make-a-subsequence/思路:如果序列a、ba、ba、b的最长公共子序列的长度为lenlenlen,且序列aaa的长度为nnn,那么最少需要的次数就等于n−lenn-lenn−len。但是我们所熟知的最长公共子序列解法的时间复杂度是O(n∗m)O(n*m)O(n∗m)的,显然本题的数据范围不允许这样做。注意到题目中的一个重要条件:aaa中的元素互不相同。那么我们可以通过函数:f(a原创 2021-07-26 20:18:03 · 153 阅读 · 0 评论 -
力扣 1877. 数组中最大数对和的最小值 贪心 排序
https://leetcode-cn.com/problems/minimize-maximum-pair-sum-in-array/思路:这个贪心还是比较好想的……因为要让数对的最大值最小,必然要让最小的和最大的配对,第二小的和第二大的配对,以此类推……正确性可以用反证法证明。class Solution {public: int minPairSum(vector<int>& nums) { sort(nums.begin(),nums.end())原创 2021-07-21 19:27:22 · 112 阅读 · 0 评论 -
力扣 1838. 最高频元素的频数 滑动窗口
https://leetcode-cn.com/problems/frequency-of-the-most-frequent-element/思路:首先不难想到对原数组排序……那么对于每个起始点lll,我们可以计算出满足条件的最大的rrr,更新ans=max(ans,r−l+1)ans=max(ans,r-l+1)ans=max(ans,r−l+1)。但是这样复杂度是O(n2)O(n^2)O(n2)的,还是会超时。进一步思考,不难发现如果区间[l,r][l,r][l,r]不满足题意,那么对于任意l′&原创 2021-07-19 23:12:39 · 144 阅读 · 0 评论 -
力扣 1846. 减小和重新排列数组后的最大元素 排序 贪心
https://leetcode-cn.com/problems/maximum-element-after-decreasing-and-rearranging/思路:想到排序后就很简单了……第一个位置确定后,每个位置的最大值已经确定了,再满足一下限制即可。class Solution {public: int maximumElementAfterDecrementingAndRearranging(vector<int>& arr) { sort(a原创 2021-07-16 20:02:16 · 126 阅读 · 0 评论 -
力扣 1449. 数位成本和为目标值的最大数字 dp 贪心
https://leetcode-cn.com/problems/form-largest-integer-with-digits-that-add-up-to-target/思路一:依旧是完全背包的变种……只不过这道题要求恰好装满背包,那么在初始化的时候只初始化dp0dp_0dp0为空,其余的初始化为−∞-\infin−∞即可。但是此题需要比较的元素是字符串而不是整数,而且字符串的比较方式也有所区别:首先判断长度关系,然后逐字符判断。如果简单的认为dpdpdp数组每个元素都是字符串,然后按照如下方程原创 2021-06-12 02:46:22 · 567 阅读 · 1 评论 -
力扣 1707. 与数组中元素的最大异或值 01字典树 贪心
https://leetcode-cn.com/problems/maximum-xor-with-an-element-from-array/思路:01字典树,只不过多了一个最大值限制。那么在字典树的每个节点中记录一下到当前位置的最小值,如果该最小值满足限制,那么就可以走到该节点,否则不行。class Tire{public: vector<Tire*> child; int min_value; Tire():min_value(0x3f3f3f3f)原创 2021-06-06 21:22:57 · 155 阅读 · 0 评论 -
力扣 525. 连续数组 哈希 前缀和 贪心
https://leetcode-cn.com/problems/contiguous-array/思路:其实和昨天那道题是差不多的……把数组中的0变为-1,那么问题转换为找总和为0的最长连续子数组。搞一个哈希表记录和到位置的映射:如果[0,i][0,i][0,i]的总和为jjj,那么可以令hash[j]=ihash[j]=ihash[j]=i。那么如果记录过jjj了,说明我们找到了一个合法区间,其长度为i−hash[j]i-hash[j]i−hash[j]。依据贪心思想,记录过的位置越靠前越好,因此只原创 2021-06-03 01:40:03 · 158 阅读 · 0 评论 -
力扣 421. 数组中两个数的最大异或值 01字典树 贪心
https://leetcode-cn.com/problems/maximum-xor-of-two-numbers-in-an-array/思路:01字典树模板题……贪心就比较好想了,根据二进制的性质,显然要从高位枚举。class Tire{public: Tire() { root.resize(2,nullptr); } void insert(int num) { int val=1<<30;原创 2021-05-16 02:32:48 · 183 阅读 · 0 评论 -
力扣 12. 整数转罗马数字 贪心 模拟
https://leetcode-cn.com/problems/integer-to-roman/思路:经典贪心问题——求解找零钱的最小张数——的变体。直接模拟即可……class Solution {public: string intToRoman(int num) { map<int,string> mp={ {1000,"M"}, {900,"CM"}, {500,"D"},原创 2021-05-14 00:49:37 · 163 阅读 · 0 评论 -
力扣 179. 最大数 贪心 排序
https://leetcode-cn.com/problems/largest-number/思路:严格证明不太会……先把每个数字转换成字符串,那么对于字符串a、ba、ba、b,如果a+b>b+aa+b>b+aa+b>b+a就让aaa在bbb前面,按照这个方式排序即可。class Solution {public: string largestNumber(vector<int>& nums) { vector<string>原创 2021-04-13 13:12:12 · 133 阅读 · 0 评论 -
力扣 781. 森林中的兔子 贪心
https://leetcode-cn.com/problems/rabbits-in-forest/思路:贪心或者脑筋急转弯?考虑当有nnn只兔子说还有mmm只兔子与自己有相同的颜色,当n<=m+1n<=m+1n<=m+1时,显然让这些兔子都是同一个颜色是最赚的,那么对答案的贡献就是m+1m+1m+1(可以认为此时还有m+1-n只兔子的回答没有包含在数组中);当n>m+1n>m+1n>m+1时,显然我们不能让这些兔子全部是一个颜色,只能让他们按照m+1m+1m+1个原创 2021-04-04 16:24:03 · 159 阅读 · 0 评论 -
PIPIOJ 1440: PIPI的位运算问题Ⅲ 位运算 贪心
http://pipioj.online/problem.php?id=1440思路:依次读入nnn个数字,设tobtobtob为一函数,它接受一个整型参数xxx,返回xxx的二进制表示(数组形式),因为ai<=1018a_i<=10^{18}ai<=1018且260>10182^{60}>10^{18}260>1018,我们可以通过以下方式计算出数组sumsumsum:sumi=∑j=0ntob(aj)[i]sum_i=\sum_{j=0}^ntob(a_j)原创 2021-03-09 01:31:52 · 145 阅读 · 0 评论 -
PIPIOJ 1018: 士兵排阵 贪心 数学
http://pipioj.online/problem.php?id=1018思路:和这道题很像。既然已知当x=a[mid]x=a[mid]x=a[mid]时,∑i=1n∣ai−x∣\sum_{i=1}^n|a_i-x|∑i=1n∣ai−x∣取得最小值,那么将所有士兵移动到同一行的纵坐标就确定了。现在考虑横坐标,假设最终结果中第一个士兵的横坐标为ttt,那么根据贪心策略,我们肯定希望最小的xix_ixi移动到ttt,第二小的xix_ixi移动到t+1t+1t+1……那么对横坐标进行排序后,我们原创 2021-03-06 01:57:58 · 393 阅读 · 0 评论 -
CSUOJ 2323 疯狂的企鹅II 贪心 思维
http://acm.csu.edu.cn:20080/csuoj/problemset/problem?pid=2323思路:首先明确一点,行和列可以分开计算,没有影响。先考虑把所有企鹅移动到同一行的情况,因为棋盘的长宽和企鹅数量相等,且同一个格子只能有一个企鹅,所以这些企鹅应该各自独占一列,为了让步数尽量小,把横坐标排序后,第iii只企鹅应该移动到横坐标为iii的位置,对应的贡献为abs(xi−i)abs(x_i-i)abs(xi−i);接下来考虑把它们移动到同一行的问题,结论是把纵坐标从小到大排原创 2021-03-06 00:55:52 · 204 阅读 · 0 评论 -
力扣 561. 数组拆分 I 贪心
https://leetcode-cn.com/problems/array-partition-i/思路:贪心,结论很简单,从小到大排序后取奇数位置的和即为答案,证明略去。class Solution {public: int arrayPairSum(vector<int>& nums) { sort(nums.begin(),nums.end()); int n=nums.size(),ans=0; for(int i原创 2021-02-18 00:46:20 · 184 阅读 · 0 评论 -
力扣 665. 非递减数列 思维 贪心
https://leetcode-cn.com/problems/non-decreasing-array/submissions/思路:虽然是简单题,不过还是挺考察思维能力的。不妨假设有ai>ai+1a_i>a_{i+1}ai>ai+1,那么此时我们必须要修改元素使得它满足题意,有几种修改方式?两种。1.1.1.当ai−1<=ai+1a_{i-1}<=a_{i+1}ai−1<=ai+1时,我们可以把aia_iai变成ai−1a_{i-1}ai−1;2.2原创 2021-02-07 13:56:12 · 123 阅读 · 0 评论 -
力扣 1579. 保证图可完全遍历 并查集 贪心
https://leetcode-cn.com/problems/remove-max-number-of-edges-to-keep-graph-fully-traversable/思路:这题目是有点贪心的思想在里面的。考虑任意两个不同的点(a,b)(a,b)(a,b),假设他们之间存在类型为333的边,那么这两点之间的其余边都可以删去,仅保留这一条边即可,所以我们应该先把类型为333的边连起来的点合并到一起,其余的顶点就只能通过普通边来连接了。这就启发我们用并查集来做,由于普通边有两种,所以我们需要原创 2021-01-27 15:20:54 · 107 阅读 · 0 评论 -
力扣 621. 任务调度器 贪心/思维
https://leetcode-cn.com/problems/task-scheduler/思路一:贪心。考虑到nnn的冷却时间,我们自然想到优先执行任务数较多的任务,所以需要把不同种类的任务按照任务数量从大到小排序,每一轮可以选取前n+1n+1n+1个任务执行,然后统计时间即可。class Solution {public: int leastInterval(vector<char>& tasks, int n) { int cnt[26]={0}原创 2020-08-10 23:16:27 · 416 阅读 · 0 评论 -
力扣 面试题63. 股票的最大利润 贪心/dp
https://leetcode-cn.com/problems/gu-piao-de-zui-da-li-run-lcof/思路一:贪心,因为只能买卖一次,所以只要知道[1…i][1…i][1…i]的最小值MiniMin_iMini和[i…n][i…n][i…n]的最大值MaxiMax_iMaxi,就可以更新ans=max(ans,Maxi−Mini)ans=max(ans,Max_i-...原创 2020-04-24 14:13:12 · 421 阅读 · 0 评论 -
力扣 面试题45. 把数组排成最小的数 贪心
https://leetcode-cn.com/problems/ba-shu-zu-pai-cheng-zui-xiao-de-shu-lcof/思路:首先把每个整数都转换成字符串,关键是如何组合这些字符串,显然对于任意两个字符串s1、s2s_1、s_2s1、s2来说,如果s1+s2<s2+s1s_1+s_2<s_2+s_1s1+s2<s2+s1,就应该把s1s...原创 2020-04-23 20:51:17 · 207 阅读 · 0 评论 -
力扣 面试题14- II. 剪绳子 II 快速幂+贪心
https://leetcode-cn.com/problems/jian-sheng-zi-ii-lcof/submissions/思路:指数爆炸,取333为底。class Solution {public: const int mod=1e9+7; using ll=long long; ll qpow(int a,int b) { ll...原创 2020-04-22 19:58:11 · 330 阅读 · 0 评论 -
codeforces gym101572 H Hyacinth 贪心+构造
https://vjudge.net/problem/Gym-101482H题目大意:给一棵树,每个节点可以有两个valuevaluevalue,但是任意相邻的两个节点,最起码要有111个valuevaluevalue是相等的。且这个相等的valuevaluevalue可以计算到贡献里面,问怎么构造使得贡献最大。思路:贪心的想一下,假设父节点是a、ba、ba、b,那么儿子节点要有111个和它...原创 2020-04-18 19:57:08 · 298 阅读 · 0 评论 -
codeforces 1313B Different Rules 贪心
https://vjudge.net/problem/CodeForces-1313B思路:最坏情况就构造尽量多的x+yx+yx+y,比如可以采用1、x+y−11、x+y-11、x+y−1,2、x+y−22、x+y-22、x+y−2,……这种方式。那么最多可以得到min(x+y−1,n)min(x+y-1,n)min(x+y−1,n)个。另外一种情况就有点麻烦,我们假设x+y<=nx+y&...原创 2020-04-12 16:06:40 · 126 阅读 · 1 评论 -
codeforces 1313A Fast Food Restaurant 贪心
https://vjudge.net/problem/CodeForces-1313A思路:简单贪心,只有777种选择,扫一遍就行了。#include<bits/stdc++.h>#define INF 0x3f3f3f3f#define pr pair<double,int>using namespace std;typedef long long ll;t...原创 2020-04-12 15:55:10 · 283 阅读 · 0 评论 -
牛客练习赛61 B 吃水果 贪心
https://ac.nowcoder.com/acm/contest/5026/B思路:我们假设n>mn>mn>m,很明显答案受限于较大的那个数,根据贪心原则,此时让mmm一直翻倍肯定比以后翻倍要赚。所以直接对mmm进行翻倍操作,只要满足:m<=n&&2∗m>nm<=n\&\&2*m>nm<=n&&...原创 2020-04-11 11:40:38 · 296 阅读 · 1 评论 -
HDU 4638 Group 贪心+莫队
https://vjudge.net/problem/HDU-4638题目大意:给出nnn个人的编号,如果一些人的编号是连续的,那么可以把他们放到同一组里面,比如1、2、31、2、31、2、3可以构成一个333个人的组,iii个人的组可以产生i∗ii*ii∗i的价值,现在有mmm个询问,每个询问(l,r)(l,r)(l,r),让你输出[l,r][l,r][l,r]的这些人产生最大的价值时的分组数...原创 2020-04-06 17:31:57 · 149 阅读 · 0 评论 -
codeforces 1332C K-Complete Word 规律+贪心
https://vjudge.net/problem/CodeForces-1332C题目大意:给一个长度为nnn的字符串和数字kkk,要求对字符串进行变换,使其满足:问最少需要修改多少个字符。思路:我们先看需要满足的第二个条件,设dis=n/kdis=n/kdis=n/k:s[1]=s[1+k]=s[1+2∗k]=……=s[1+(dis−1)∗k]s[1]=s[1+k]=s[1+2*...原创 2020-04-01 18:03:22 · 621 阅读 · 0 评论 -
codeforces 1332B Composite Coloring 水 贪心
https://vjudge.net/problem/CodeForces-1332B题目大意:给nnn个数,保证4<=ai<=10004<=a_i<=10004<=ai<=1000,且每个数都不是质数。你需要给这些数染色,保证每个数仅被染色一次,且如果两个数被染成了相同的颜色,那么必须保证它们的gcd>1gcd>1gcd>1。你需要输出...原创 2020-04-01 17:42:18 · 494 阅读 · 0 评论 -
codeforces 1328C Ternary XOR 贪心
https://vjudge.net/problem/CodeForces-1328C题目大意:给一个长度为nnn的字符串ccc,仅由0、1、20、1、20、1、2组成,输出两个字符串a、ba、ba、b,满足c[i]=(a[i]+b[i]) mod 3c[i]=(a[i]+b[i])\ mod\ 3c[i]=(a[i]+b[i]) mod 3,且max(a...原创 2020-03-28 00:21:22 · 215 阅读 · 0 评论 -
Round A 2020 - Kick Start 2020 Bundling 字典树+贪心
https://codingcompetitions.withgoogle.com/kickstart/round/000000000019ffc7/00000000001d3ff3题目大意:每组数据给nnn个字符串,每个字符串仅能划分到某一个组里面,且这个组的价值就等于该组所有字符串的最长公共前缀的长度。现在给一个数kkk,让你给这些字符串划分组,使得所有刚好含有kkk个字符串的组的价值之和最...原创 2020-03-22 17:16:55 · 678 阅读 · 0 评论 -
Round A 2020 - Kick Start 2020 Allocation 贪心
https://codingcompetitions.withgoogle.com/kickstart/round/000000000019ffc7/00000000001d3f56题目大意:给nnn个房子,每个房子要花费aia_iai元,现在你有BBB元,求最多能买多少个房子。思路:贪心,把房子从小到大排序扫一遍。#include<bits/stdc++.h>#define...原创 2020-03-22 16:58:12 · 426 阅读 · 0 评论 -
codeforces 1300E Water Balance 单调栈+贪心
https://vjudge.net/problem/CodeForces-1300E题目大意:给一个数组,每次操作可以选取一个区间[l,r][l,r][l,r],使得a[l…r]=∑i=lra[i]/(r−l+1)a[l…r]=\sum_{i=l}^{r}a[i]/(r-l+1)a[l…r]=∑i=lra[i]/(r−l+1)。问这个数组的最小的字典序。思路:贪心的想一下,肯定要让左侧的...原创 2020-03-15 19:31:48 · 162 阅读 · 1 评论 -
codeforces 1304D Shortest and Longest LIS 构造 贪心
https://vjudge.net/problem/CodeForces-1304D题目大意:给出长度为n−1n-1n−1的仅有>、<>、<>、<构成的字符串,若s[i]=“>”s[i]=“>”s[i]=“>”,说明a[i]>a[i+1]a[i]>a[i+1]a[i]>a[i+1],否则说明a[i]<a[i+1]a...原创 2020-03-15 12:33:05 · 153 阅读 · 0 评论 -
codeforces 1304C Air Conditioner 思维 贪心
https://vjudge.net/problem/CodeForces-1304C题目大意:给出nnn个顾客到来的时间tit_iti,能承受的最低温度lil_ili,能承受的最高温度rir_iri,初始温度为mmm,每分钟可以令温度增加111、减少111、或者保持不变,问能否使得这些顾客在到达饭店的那一时刻,温度是可接受的。思路:维护两个变量l、rl、rl、r,前者表示当前时间可能...原创 2020-03-15 00:17:31 · 179 阅读 · 0 评论 -
codeforces 1304B Longest Palindrome 贪心
https://vjudge.net/problem/CodeForces-1304B题目大意:给nnn个各不相同的长度均为mmm的字符串,你可以从这nnn个中选取任意个组合起来,求能得到的最长的回文串。思路:贪心,能配对的就配对,然后在不能配对的字符串里面找自身是回文串且长度最长的那个。#include<bits/stdc++.h>#define pr pair<in...原创 2020-03-14 18:42:19 · 198 阅读 · 0 评论 -
codeforces 1294F Three Paths on a Tree 树的直径+贪心
https://vjudge.net/problem/CodeForces-1294F题目大意:给一棵树,让你找到三个顶点a、b、ca、b、ca、b、c,使得a−b、a−c、b−ca-b、a-c、b-ca−b、a−c、b−c的路径所覆盖的变数尽可能大(同一条边被多次覆盖也只算111次)。思路:贪心的思考一下,必定有一组最优解,使得a、ba、ba、b是树直径的两个端点。那么通过两次dfs/bf...原创 2020-03-12 15:27:00 · 246 阅读 · 0 评论 -
codeforces 1294E Obtain a Permutation 贪心
https://vjudge.net/problem/CodeForces-1294E题目大意:给一个n∗mn*mn∗m的矩阵,每次操作可以选取任意一个位置的数使其变成[1,n∗m][1,n*m][1,n∗m]的任意一个值,或者选取某一列,进行上移操作(具体看图吧,不太好解释)。问最少经过几次操作,可以得到满足题意的矩阵。思路:其实就是个贪心,但是实现上可能有点麻烦。因为列与列是独立的,所...原创 2020-03-12 14:06:35 · 169 阅读 · 0 评论