LeetCode -- 353场周赛
找规律的小题目
c ++ class Solution { public: int theMaximumAchievableX(int num, int t) { return num + t * 2; } };
思路,动态规划。
f[i]表示,所有从0 - i - 1中跳到点 i 的方式的执行操作次数的最小值, f[0] = 0。
另j为i后面一点,f[j] = max(f[j], f[i] + 1).
class Solution { int f[1010] = {0}; public: int maximumJumps(vector<int>& nums, int target) { int n = nums.size(); f[0] = 0; for(int i = 0; i < n; i ++ ) { for(int j = i + 1; j < n; j ++ ) { if(abs(nums[j] - nums[i]) <= target) { if(!i || f[i]) f[j] = max(f[j], f[i] + 1); } } } if(f[n - 1] == 0) return -1; return f[n - 1]; } };
依旧是动态规划。
f[i][0]表示第i个位置选择num1可以构建的最长非递减子数组的长度。
f[i][1]表示第i个位置选择num2可以构建的最长非递减子数组的长度。
class Solution { public: int maxNonDecreasingLength(vector<int>& nums1, vector<int>& nums2) { int f[100005][2] = {0}; int n = nums1.size(); f[0][0] = f[0][1] = 1; for(int i = 1; i < n; i ++ ) { f[i][0] = f[i][1] = 1; if(nums1[i] >= nums1[i - 1]) f[i][0] = max(f[i][0], f[i - 1][0] + 1); if(nums1[i] >= nums2[i - 1]) f[i][0] = max(f[i][0], f[i - 1][1] + 1); if(nums2[i] >= nums1[i - 1]) f[i][1] = max(f[i][1], f[i - 1][0] + 1); if(nums2[i] >= nums2[i - 1]) f[i][1] = max(f[i][1], f[i - 1][1] + 1); } int res = 0; for(int i = 0; i < n; i ++ ) { for(int j = 0; j < 2; j ++ ) { res = max(res, f[i][j]); } } return res; } };
最后一题,差分加模拟
我们先求出nums的差分数组,在用类似滑动窗口的操作进行递推。
每次把长度为k的区间减去nums[i],利用差分可以在O(1)的时间复杂度内完成区间加减。
若其中有差分数组中的某项d[i] < 0表示无法变成0, return false
最终若所有的d[i] , 0 <= i <= n - 1, 都为0,则表示可以成功 return true
class Solution { public: bool checkArray(vector<int>& nums, int k) { int n = nums.size(); vector<int> d(n + 1, 0); d[0] = nums[0]; for(int i = 1; i < n; i ++ ) d[i] = nums[i] - nums[i - 1]; for(int i = 0; i < n; i ++ ) { if(d[i] < 0) return false; if(d[i] && i + k <= n) { d[i + k] += d[i]; d[i] = 0; } } for(int i = 0; i < n; i ++ ) { if(d[i]) return false; } return true; } };
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?