动态规划
文章平均质量分 58
麻利麻利吼
这个作者很懒,什么都没留下…
展开
-
2021-4-20 不同路径
题目 不同路径 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。 问总共有多少条不同的路径? 示例 1: 输入:m = 3, n = 7 输出:28 示例 2: 输入:m = 3, n = 2 输出:3 解释: 从左上角开始,总共有 3 条路径可以到达右下角。 向右 -> 向下 -> 向下 向下 -> 向下 -> 向右 向下 ->转载 2021-04-20 11:28:30 · 42 阅读 · 0 评论 -
2021-4-19 最长回文子串
class Solution { public: string longestPalindrome(string s) { int count = 0; int max,begin,end,i,j; max = 0; begin = end = 1; int len = s.length(); if(len == 0 || len == 1) return s; vector&l原创 2021-04-19 15:07:07 · 44 阅读 · 0 评论 -
20210407 最长湍流子数组
题目 最长湍流子数组 当 A 的子数组 A[i], A[i+1], …, A[j] 满足下列条件时,我们称其为湍流子数组: 若 i <= k < j,当 k 为奇数时, A[k] > A[k+1],且当 k 为偶数时,A[k] < A[k+1]; 或 若 i <= k < j,当 k 为偶数时,A[k] > A[k+1] ,且当 k 为奇数时, A[k] < A[k+1]。 也就是说,如果比较符号在子数组中的每个相邻元素对之间翻转,则该子数组是湍流子数组。 返原创 2021-04-07 20:04:03 · 62 阅读 · 0 评论 -
2021-04-05 求最长递增子序列
class Solution { public: int lengthOfLIS(vector<int>& nums) { vector<int> dp(nums.size() , 1); int Max = 1; for(int i=1 ; i<dp.size() ; i++) { for(int j=0 ; j<i ; j++) {原创 2021-04-06 18:08:43 · 45 阅读 · 0 评论 -
2021-04-04一和零
给你一个二进制字符串数组 strs 和两个整数 m 和 n 。 请你找出并返回 strs 的最大子集的大小,该子集中 最多 有 m 个 0 和 n 个 1 。 如果 x 的所有元素也是 y 的元素,集合 x 是集合 y 的 子集 。 示例 1: 输入:strs = [“10”, “0001”, “111001”, “1”, “0”], m = 5, n = 3 输出:4 解释:最多有 5 个 0 和 3 个 1 的最大子集是 {“10”,“0001”,“1”,“0”} ,因此答案是 4 。 其他满足题意但较原创 2021-04-05 09:13:00 · 121 阅读 · 0 评论 -
2021-04-02 判断子序列
class Solution { public: bool isSubsequence(string s, string t) { if(s == "") return true; if(t == "") return false; int i,j; i = j = 0; for(i = 0 ; i<t.length() ; i++) { if(t[i] == s[j])原创 2021-04-03 13:22:04 · 127 阅读 · 0 评论 -
20210323 买卖股票
给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。 返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。 示例 1: 输入:[7,1,5,3,6,4] 输出:5 解释:在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。 注意利润不能是 7-1原创 2021-03-23 20:02:07 · 171 阅读 · 0 评论 -
20210322 区域和检索 - 数组不可变
class NumArray { public: vector<int> nums; public: NumArray(vector<int>& nums) { this->nums = nums; } int sumRange(int left, int right) { if(left > right) return 0; if(left == right) return原创 2021-03-22 19:43:46 · 39 阅读 · 0 评论 -
2021-03-20 除数博弈
爱丽丝和鲍勃一起玩游戏,他们轮流行动。爱丽丝先手开局。 最初,黑板上有一个数字 N 。在每个玩家的回合,玩家需要执行以下操作: 选出任一 x,满足 0 < x < N 且 N % x == 0 。 用 N - x 替换黑板上的数字 N 。 如果玩家无法执行这些操作,就会输掉游戏。 只有在爱丽丝在游戏中取得胜利时才返回 True,否则返回 False。假设两个玩家都以最佳状态参与游戏。 示例 1: 输入:2 输出:true 解释:爱丽丝选择 1,鲍勃无法进行操作。 示例 2: 输入:3 输出:fa原创 2021-03-20 17:27:07 · 41 阅读 · 0 评论 -
20210319 按摩师
题目 按摩师 一个有名的按摩师会收到源源不断的预约请求,每个预约都可以选择接或不接。在每次预约服务之间要有休息时间,因此她不能接受相邻的预约。给定一个预约请求序列,替按摩师找到最优的预约集合(总预约时间最长),返回总的分钟数。 示例 1: 输入: [1,2,3,1] 输出: 4 解释: 选择 1 号预约和 3 号预约,总时长 = 1 + 3 = 4。 示例 2: 输入: [2,7,9,3,1] 输出: 12 解释: 选择 1 号预约、 3 号预约和 5 号预约,总时长 = 2 + 9 + 1 = 12。 示原创 2021-03-19 14:23:27 · 96 阅读 · 0 评论