第 183 场周赛 Posted on 2020-04-05 | In leetcode , Weekly-Contest | | Words count in article: 525 | Reading time ≈ 3 非递增顺序的最小子序列1234567891011121314151617class Solution {public: vector<int> minSubsequence(vector<int>& nums) { sort(nums.begin(), nums.end()); int sum = 0; for(auto i: nums) sum += i; int tsum = 0; vector<int> ret; for(int i=nums.size()-1; i>=0; i-- ){ tsum += nums[i]; sum -= nums[i]; ret.push_back(nums[i]); if(tsum > sum) break; } return ret; }}; 5377. 将二进制表示减到 1 的步骤数123456789101112131415161718192021222324252627282930313233class Solution {public: int numSteps(string s) { int ans = 0; while (s.size() != 1) { string news; if (s.back() == '0') { news = s.substr(0, s.size() - 1); s = news; } else { bool all1 = true; int last = -1; for (int i = s.size() - 1; i >= 0; i--) { if (s[i] != '1') { all1 = false; last = i; break; } } if (all1) { return ans + 1 + s.size(); } else { s[last] = '1'; for (int i = last + 1; i < s.size(); i++) { s[i] = '0'; } } } ans++; } return ans; }}; 最长快乐字符串123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263class Solution {public: string longestDiverseString(int a, int b, int c) { string ans; while(true){ if(a==0&&b==0&&c==0) break; if(ans.size()>=2&&ans.back()=='a'&&ans[ans.size()-2]=='a'){ if(b==0&&c==0) break; if(b>=c){ ans.push_back('b'); b--; }else{ ans.push_back('c'); c--; } continue; } if(ans.size()>=2&&ans.back()=='b'&&ans[ans.size()-2]=='b'){ if(a==0&&c==0) break; if(a>=c){ ans.push_back('a'); a--; }else{ ans.push_back('c'); c--; } continue; } if(ans.size()>=2&&ans.back()=='c'&&ans[ans.size()-2]=='c'){ if(a==0&&b==0) break; if(a>=b){ ans.push_back('a'); a--; }else{ ans.push_back('b'); b--; } continue; } if(a>=b&&a>=c){ ans.push_back('a'); a--; continue; } if(b>=a&&b>=c){ ans.push_back('b'); b--; continue; } if(c>=a&&c>=b){ ans.push_back('c'); c--; continue; } } return ans; }}; 石子游戏 III123456789101112131415161718192021222324class Solution {public: string stoneGameIII(vector<int>& a) { int n = a.size(); vector <int> f; f.resize(n + 1); f[n] = 0; for (int i = n - 1; i >= 0; i--) { f[i] = -1e9; int s = 0; for (int j = i; j < n && j < i + 3; j++) { s += a[j]; f[i] = max(f[i], s - f[j + 1]); } } if (f[0] > 0) { return "Alice"; } else if (f[0] == 0) { return "Tie"; } else { return "Bob"; } }};s Donate? comment? Donate WeChat Pay Alipay