贪心算法
SYaoJun
这个作者很懒,什么都没留下…
展开
-
767. 重构字符串
Leetcode767 题目链接 解题思路 贪心:每次从堆中取出两个字母,并将对应的出现次数减一。 class Solution { public: string reorganizeString(string S) { //2020.11.30 unordered_map<char, int> hash; priority_queue<pair<int, char>> pq; for(auto c:原创 2020-11-30 12:25:21 · 186 阅读 · 0 评论 -
袋鼠过河
公司:搜狐 类型:贪心 动态规划 难度:中等 类似题:leetcode 跳跃游戏Ⅱ 题意:从起点开始,每次最多可以跳k步,我们考虑从当前可跳范围内,选择一个可以跳跃的最远距离作为下一个可跳区间的起点,然后逐步更新最大可跳范围。在更新的过程中,如果到达了最大可跳边界,但是最大可跳区间没有更新,说明不可能跳到末尾去,所以直接结束。 #include <iostream> #include ...原创 2020-04-27 21:24:54 · 215 阅读 · 0 评论 -
738. 单调递增的数字
题目 难度:中等 类型:贪心 题意:遇到逆序,就将当前位减1,同时将后面的数全部置为9。循环判断检查前面是否产生了逆序。 class Solution { public: int monotoneIncreasingDigits(int N) { if(N < 10) return N; deque<int> num; //...原创 2020-04-15 16:59:04 · 193 阅读 · 0 评论 -
41. 最大子数组
lintcode题目 类型:数组 难度:简单 题意:看到子数组直接上前缀和,然后有最值问题,考虑从前往后维护一个最值。这才是通解,以前总是死记一个前缀和小于0时重新开始,现在开始走通用之路了,顶不住。 class Solution { public: int maxSubArray(vector<int> &nums) { int n = nums....原创 2020-04-15 13:32:09 · 157 阅读 · 0 评论 -
44. 最小子数组
lintcode题目 难度:简单 类型:数组 版本1 class Solution { public: int minSubArray(vector<int> &nums) { int n = nums.size(); vector<int> sum(n+1, 0); for(int i = 0; i <...原创 2020-04-15 13:15:36 · 191 阅读 · 0 评论 -
452. 用最少数量的箭引爆气球
题目 类型:贪心 难度:中等 题意:按照end从小到大排序 如果start > R更新R作为本次射箭的最右边界 R以内的所有气球都可以引爆 class Solution { public: int findMinArrowShots(vector<vector<int>>& points) { //2020.3.28 贪心 ...原创 2020-03-28 10:15:54 · 130 阅读 · 0 评论 -
435. 无重叠区间
题目 类型:贪心 难度:中等 题意:删除最少的重叠区间。对于[L, R]区间,按照R从小到大排序。 class Solution { public: int eraseOverlapIntervals(vector<vector<int>>& intervals) { if(intervals.empty()) return 0; ...原创 2020-03-28 10:02:33 · 146 阅读 · 0 评论 -
种花
公司:美团 类型:贪心 题目 题解:参考 #include <bits/stdc++.h> using namespace std; const int N = 1e5+5; int arr[N]; int main(){ int n, k; scanf("%d", &n); for(int i = 0; i < n; i++){ scanf("%d", &am...原创 2020-03-26 21:20:03 · 194 阅读 · 0 评论 -
858. Prim算法求最小生成树
AcWing题目链接 #include<iostream> #include<algorithm> #include<cstring> using namespace std; const int N=510,INF=0x3f3f3f; int n,m; bool st[N];//状态 int g[N][N]; //创建图 int d[N];//点之间对距离 i...原创 2019-10-30 22:49:09 · 167 阅读 · 0 评论 -
1023 组个最小数 (20 分)
查看原题目请点我 C/C++版 #include<cstdio> int arr[12]={0}; int main(){ for(int i=0;i<10;i++){ scanf("%d",&arr[i]); } for(int i=1;i<10;i++){ if(arr[i]!=0){ ...原创 2018-03-14 18:50:37 · 192 阅读 · 0 评论 -
翻硬币【蓝桥杯】
问题描述 小明正在玩一个“翻硬币”的游戏。桌上放着排成一排的若干硬币。我们用 * 表示正面,用 o 表示反面(是小写字母,不是零)。比如,可能情形是:**oo***oooo如果同时翻转左边的两个硬币,则变为:oooo***oooo现在小明的问题是:如果已知了初始状态和要达到的目标状态,每次只能同时翻转相邻的两个硬币,那么对特定的局面,最少要翻动多少次呢?我们约定:把翻动相邻的两个硬币叫做一步操作,原创 2016-02-17 22:57:37 · 487 阅读 · 0 评论 -
134. Gas Station
class Solution { public: int canCompleteCircuit(vector<int>& gas, vector<int>& cost) { int n = gas.size(); //从i到j不可达 可以推出从它们之间的任意一个点出发也不可达 因为从i出发时,到中间节点还有可能有剩余的...原创 2019-09-12 17:34:22 · 94 阅读 · 0 评论 -
402. 移掉K位数字
class Solution { public: //非常经典的题 //先删逆序对 然后字符串是单调递增以后 删掉末尾的数 //注意去掉前导0 string removeKdigits(string num, int k) { string res; for(auto c: num){ while(res.si...原创 2019-09-12 17:15:35 · 85 阅读 · 0 评论 -
452. Minimum Number of Arrows to Burst Balloons
按照右端点排序 贪心选择右端点作为划分点 class Solution { public: static bool cmp(vector<int> a, vector<int> b){ return a[1] < b[1]; } int findMinArrowShots(vector<vector<int>&...原创 2019-09-12 16:57:35 · 77 阅读 · 0 评论 -
406. 根据身高重建队列
class Solution { public: static bool cmp(vector<int> a, vector<int> b){ //先按照身高从大到小排 当身高相同时按照k排 if(a[0] != b[0]) return a[0] > b[0]; return a[1] < b[1]; } ...原创 2019-09-12 16:42:51 · 134 阅读 · 0 评论 -
376. Wiggle Subsequence
class Solution { public: int wiggleMaxLength(vector<int>& nums) { nums.erase(unique(nums.begin(), nums.end()), nums.end()); if(nums.size() <= 2) return nums.size(); ...原创 2019-09-12 16:21:46 · 239 阅读 · 0 评论 -
今年暑假不AC【HDOJ2037】
解题思路:把每个时间段按照结束时间从小到大排列,如果结束时间相同则把开始时间按照从大到小排列。因为开始的时间越晚整个看电视的过程就比较短,多余的时间可以用来选择其他类型的节目,这样所看的节目就比较多了。 #include #include #include using namespace std; struct AC{ int start; int end; boo原创 2018-01-12 21:53:12 · 357 阅读 · 0 评论 -
1001采花生
https://www.nowcoder.com/pat/2/problem/249 解题思路: 判断是否能在规定时间能采取尽可能多的花生,并且要返回。 采花生本身要花费一个时间单位。 而且要从大往小采。 #include #include #include using namespace std; struct peanut{ int x;原创 2018-01-25 19:39:26 · 724 阅读 · 0 评论 -
1020 月饼 (25 分)
查看原题目请点我这里 解题思路:这是入门级的贪心算法,涉及结构体排序,需要注意的是尽量统一数据类型,不然特别烦。我第三个测试点搞了很久,但是我看了别人的代码,发现我的逻辑上丝毫没有问题,最后终于发现了,原来是结构体中一部分用的int,还有一部分用的double,两者进行比较的时候就出现了问题。 #include<cstdio> #include<algorithm>...原创 2018-03-15 18:06:47 · 210 阅读 · 0 评论 -
1037. Magic Coupon (25)
查看原题目请点我这里 解题思路 先按从大到小排序 大的正数和大的正数相乘 再按从小到大排序 小的负数和小的负数相乘 最后结果就是两者的和 #include<cstdio> #include<algorithm> using namespace std; const int maxn=100005; int cop[maxn]={0}; int pro[maxn...原创 2018-03-16 11:05:04 · 180 阅读 · 0 评论 -
1038 Recover the Smallest Number (30 分)
显然这是道贪心题 关键是怎么贪,第一想法是根据数字的大小从大到小排列,显然不行。 这里是要组成字符串,所以要根据两者形成的字符串来从小到大排列。 具体视频可以看左神的初级算法课程 注意点: 第一个数字不能是0,所以要进行判断,也有可能第一个子数据全是0,同理也可能是前两个串都为0,最终,所有串都可能为0,如果一般的程序,此时没有任何输出。但是第三个测试点是,在所有数据都是0的情况下,需要输出一个0...原创 2019-02-16 11:59:00 · 210 阅读 · 0 评论 -
1070 Mooncake (25 分)
这道题是我接触得最早得贪心算法题,但是没想到这次做还是有个测试点没过去。 主要是样例给得数据让我主观得认为,总量一定是整数。 然后我反复得读题目,似乎也没发现这里隐藏得陷阱。 出题人这样搞我们真的不怕下雨天被雷带走吗? #include<cstdio> #include<algorithm> using namespace std; const int maxn = 1e3...原创 2019-02-25 17:09:44 · 308 阅读 · 2 评论 -
POJ3617 Best Cow Line
挑战程序设计竞赛 贪心 注意: 每80个字符要换行 #include<cstdio> #include<string> #include<iostream> #include<algorithm> using namespace std; int n; int main(){ cin >> n; string s; char c...原创 2019-08-24 11:25:34 · 92 阅读 · 0 评论 -
803. 区间合并
贪心法 #include <iostream> #include <vector> #include <algorithm> using namespace std; typedef pair<int, int> PII; vector<PII> segs; void merge(vector<PII>& segs){...原创 2019-09-11 11:33:42 · 88 阅读 · 0 评论 -
860. Lemonade Change
class Solution { public: bool lemonadeChange(vector<int>& bills) { int fives = 0, tens = 0; //优先用10块的 for(auto b: bills){ if(b == 5) fives++; //5块 ...原创 2019-09-11 20:26:34 · 71 阅读 · 0 评论 -
392. Is Subsequence
贪心 子串和原串挨个比对,当两者相同时,则移动到下一位。 class Solution { public: bool isSubsequence(string s, string t) { int k = 0; for(int i = 0; i < t.size() && k < s.size(); i++){ ...原创 2019-09-11 20:37:15 · 120 阅读 · 0 评论 -
455. Assign Cookies
class Solution { public: int findContentChildren(vector<int>& g, vector<int>& s) { //把满足需求的最小饼干分配给当前小朋友 sort(g.begin(), g.end()); sort(s.begin(), s.end());...原创 2019-09-12 07:22:42 · 73 阅读 · 0 评论 -
55. Jump Game
class Solution { public: int findContentChildren(vector<int>& g, vector<int>& s) { //把满足需求的最小饼干分配给当前小朋友 sort(g.begin(), g.end()); sort(s.begin(), s.end());...原创 2019-09-12 08:01:14 · 73 阅读 · 0 评论 -
45. Jump Game II
没太理解 class Solution { public: int jump(vector<int>& nums) { //011122223333444 if(nums.size() == 1) return 0; int l = 0, r = 0, step = 0; while(l <= r){...原创 2019-09-12 08:18:33 · 77 阅读 · 0 评论 -
FatMouse' Trade【HDOJ1009】
题目描述 FatMouse prepared M pounds of cat food, ready to trade with the cats guarding the warehouse containing his favorite food, JavaBean. The warehouse has N rooms. The i-th room contains J[i] pound原创 2018-01-12 21:07:31 · 274 阅读 · 0 评论