LC贪心
你别教我打游戏
直面困难,重视过程,追求结果,淡忘过去。
展开
-
LeetCode 376. 摆动序列 (动态规划、贪心)
376. 摆动序列 方法一 以f[i][0]、f[i][1]f[i][0]、f[i][1]f[i][0]、f[i][1]分别表示以第 i 位结尾的子序列分别是下降、上升状态的最长长度, 每次以O(n)O(n)O(n)的开销去转移。 const int N = 1010; class Solution { public: int wiggleMaxLength(vector<int>& nums) { int f[N][2] = {0}; int a原创 2021-06-12 22:58:13 · 73 阅读 · 0 评论 -
LeetCode 179. 最大数 (排序、贪心)
179. 最大数 class Solution { public: static bool cmp(const string& s1, const string &s2) { return s1 + s2 > s2 + s1; } string largestNumber(vector<int>& nums) { vector<string> v; for(int x:nums)原创 2021-04-12 20:44:01 · 100 阅读 · 0 评论 -
LeetCode 5712. 你能构造出连续值的最大数目 (DP、贪心)
5712. 你能构造出连续值的最大数目 此题同时具备dp和贪心的双重思维。秒啊! class Solution { public: int getMaximumConsecutive(vector<int>& coins) { sort(coins.begin(),coins.end()); int x = 0; for(int y:coins){ if(y > x+1) break;原创 2021-03-21 18:30:02 · 137 阅读 · 0 评论 -
LeetCode 995. K 连续位的最小翻转次数 (贪心、模拟、滑动窗口、差分数组)
K 连续位的最小翻转次数 贪心+模拟 class Solution { public: int minKBitFlips(vector<int>& a, int K) { int ans = 0; int i = 0, n = a.size(); while(i<n){ if(a[i]){ i++; }else{ i原创 2021-02-19 00:33:54 · 68 阅读 · 0 评论 -
LeetCode 406. 根据身高重建队列 (贪心+排序)
406. 根据身高重建队列 身高从低到高,留空位置。 先放的人对后方的人没有影响(身高比他矮),所以,只需要考虑在前面留多少空位置即可。 class Solution { public: static bool cmp(const vector<int>&v1,const vector<int>&v2){ return v1[0]<v2[0] || v1[0]==v2[0] && v1[1]>v2[1];原创 2020-11-16 14:28:42 · 141 阅读 · 0 评论 -
LeetCode 402. 移掉K位数字 (贪心+单调栈)
移掉K位数字 由于要想让数字尽可能小,所以从高位到低位依次考虑每一位。 这相当于在维护一个单调递增的栈。 比如现有 1345 ,又来了一个2,那么3、4、5就都可以出栈,2加入(当然前提是还能删除三个字符。)。 class Solution { public: string removeKdigits(string num, int k) { string ans; for(int i=0;i<num.size();i++){ whil原创 2020-11-15 23:10:20 · 66 阅读 · 0 评论 -
LeetCode 1024. 视频拼接 (DP、贪心)
视频拼接 DP 思路:有每一个片段要么选要么不选,所以类似于01背包, 然后每个片段会填充区间的某一个子区间,类似于01背包的体积维度。 状态 dp[i][j]dp[i][j]dp[i][j]表示覆盖区间[i,j][i,j][i,j]所需要的最小的片段数。 DP方程 一般情况下:dp[i][j]=min(dp[i][v[0]]+dp[v[1]][j]+1);dp[i][j] = min(dp[i][v[0]]+dp[v[1]][j]+1);dp[i][j]=min(dp[i][v[0]]+dp[原创 2020-10-19 20:44:13 · 527 阅读 · 0 评论 -
LeetCode 1405. 最长快乐字符串 (贪心)
最长快乐字符串 由于在三个字符的数量都差不多的时候,能组成的字符串最长。 所以采取这样的贪心策略: 优先选取数量多的字符 如果不能,选次多的。 如果还不能,选最少的。 如果没有了,结束循环。 class Solution { public: string longestDiverseString(int a, int b, int c) { char v[] = {'a','b','c'}; int cnt[] = {a,b,c}; string原创 2020-10-11 01:33:48 · 162 阅读 · 0 评论 -
LeetCode 646. 最长数对链 (DAG上的最长路、DP、贪心)
class Solution { public: struct Node{ int a, b; Node(int a,int b):a(a),b(b){} bool operator<(const Node &x) const{ return b<x.a; } }; int dp[1010] = {0}, n, ans = 1; vector<Node> n原创 2020-09-02 15:57:43 · 241 阅读 · 0 评论