
LeetCode
LeetCode周赛总结
gorgeous(๑><๑)
一点浩然气,千里快哉风。
展开
-
【LeetCode】300. 最长递增子序列【线性DP】
思路典型DP状态:dp[i]表示以i结尾的最长上升子序列的长度。状态转移方程: dp[i]=max(dp[i],dp[j]+1),j<idp[i] = max(dp[i],dp[j]+1),j < idp[i]=max(dp[i],dp[j]+1),j<iAC代码C++class Solution {public: // dp[i] 表示以i结尾的最长上升子序列的长度 int lengthOfLIS(vector<int>& nums) {原创 2021-07-15 20:11:47 · 164 阅读 · 0 评论 -
【LeetCode】72. 编辑距离【线性DP】
思路状态:dp[i][j]表示word1的前i个字符变成word2的前j个字符的最少操作数。状态转移方程word[i]==word[j]–>dp[i][j] = dp[i-1][j-1]word[i]!=word[j] 需要考察,修改,插入,删除三种情况取最小值f[i][j] = min(f[i-1][j-1],min(f[i][j-1],f[i-1][j]))AC代码C++class Solution {public: int minDistance(string w原创 2021-07-16 21:50:57 · 87 阅读 · 0 评论 -
【LeetCode】1014.观光旅游组合【维护前缀最大值】
思路很Interesting的一道题目,首先是不能暴力的,因为数组长度能到10^4。我们考虑如何化简,对于题目中要求的我们可以简化为max(a[i]+i+a[j]−j),i<jmax(a[i]+i+a[j]-j),i<jmax(a[i]+i+a[j]−j),i<j对于观光点J,我们发现当J固定的时候,其实是求的max(a[i]+i)max(a[i]+i)max(a[i]+i)的最大值,对于max(a[i]+i)max(a[i]+i)max(a[i]+i),我们可以边遍历J边维护。类似原创 2021-07-20 21:11:50 · 200 阅读 · 0 评论 -
【LeetCode】121.买卖股票的时机【线性DP】
思路维护股票的最低价格和最高利润即可。AC代码C++class Solution {public: int maxProfit(vector<int>& prices) { int len = prices.size(); int minx = prices[0]; int profit = 0; for(int i = 0; i < len; ++i){ profit = m原创 2021-07-17 15:24:24 · 134 阅读 · 0 评论 -
【LeetCode】 53. Maximum Subarray【线性DP】
思路典型DP状态表示:dp[i]表示以i结尾的最大连续子序列和状态转移: dp[i] = max(dp[i-1]+num[i],dp[i])C++class Solution {public: // dp[i] 表示以i结尾的最大和的连续子数组 // 状态转移方程 dp[i] = max(dp[i],dp[i-1]+a[i]); int maxSubArray(vector<int>& nums) { int len = nums.si原创 2021-07-14 19:48:21 · 106 阅读 · 0 评论 -
【LeetCode】1937. 扣分后的最大得分【线性DP】
思路我们很容易写出下面的DPfor (int i=0; i<m; i++) for (int j=0; j<n; j++) for (int k=0; k<n; k++) dp[i][j] = max(dp[i][j], dp[i-1][k] - abs(j-k) + points[i][j]);但是时间复杂度O(n^3)在题目所给的数据中是肯定会TLE的,怎么改进呢?我们将绝对值符号拆开,得到下面的分段转移方程:dp[i][j] = max{ dp[i原创 2021-07-22 21:49:11 · 220 阅读 · 0 评论 -
【LeetCode】11.盛最多水的容器【双指针】
一句话题解双指针,维护最大化最短边的同时记录最大边。C++代码class Solution {public: int maxArea(vector<int>& height) { int len = height.size(); int l = 0; int r = len-1; int area = min(height[r],height[l])*(r-l); while(l < r原创 2022-01-29 21:56:56 · 538 阅读 · 0 评论 -
【LeetCode】3. 无重复字符的最长子串
思路快慢指针C++class Solution {public: int lengthOfLongestSubstring(string s) { int len = s.size(); int i = 0; int j = 0; int ans = 0; map<char,int> mp; for(int j = 0; j < len; ++j){原创 2021-11-30 22:24:37 · 496 阅读 · 0 评论 -
【LeetCode】1.两数之和
C++class Solution {public: vector<int> twoSum(vector<int>& nums, int target) { unordered_map<int,int> mp; for(int i = 0; i < (int)nums.size(); ++i){ auto it = mp.find(target-nums[i]); i原创 2021-11-28 21:41:20 · 895 阅读 · 0 评论 -
【LeetCode】第54场夜喵双周赛
文章目录检查是否区域内所有整数都被覆盖思路C++实现找到需要补充粉笔的学生编号思路C++实现Python实现最大的幻方思路C++实现检查是否区域内所有整数都被覆盖思路暴力C++实现class Solution {public: bool isCovered(vector<vector<int>>& ranges, int left, int right) { int len = ranges.size(); vector&l原创 2021-06-14 13:04:57 · 141 阅读 · 0 评论 -
【LeetCode】第245场力扣周赛
文章目录重新分配字符使所有字符串都相等思路C++Python可移除字符的最大数目合并若干三元组以形成目标三元组思路PythonC++最佳运动员的比拼回合重新分配字符使所有字符串都相等思路因为字符的移动是任意的,所以我们只需要统计每个字母的个数,判断其是否能被字符串的个数整除即可。C++class Solution {public: bool makeEqual(vector<string>& words) { int len = words.size(原创 2021-06-13 22:22:44 · 249 阅读 · 2 评论