二分查找前提是数组为有序数组注意开闭区间int search(vector & nums, int target) {int left = 0;int right = num...
二分查找前提是数组为有序数组注意开闭区间int search(vector & nums, int target) {int left = 0;int right = num...
两个月的算法训练营,主要学习了 数组、链表、哈希表、字符串、栈与队列、二叉树、回溯、贪心、动态规划及单调栈。 题目虽然不多,但也是卡哥精心挑选,对于我们这种工作中很少使用到算...
84.柱状图中最大的矩形 找每个柱子左右两边第一个小于该柱子的柱子 从栈头(元素从栈头弹出)到栈底的顺序从大到小 三种情况: 情况一:当前遍历的元素heights[i]大于栈...
503.下一个更大元素II 两个nums数组拼接在一起,使用单调栈计算出每一个元素的下一个最大值,最后再把结果集即result数组resize到原数组大小就可以 vector...
739.每日温度 首先想到暴力求解 遍历的过程中需要用一个栈来记录右边第一个比当前元素高的元素,优点是整个数组只需要遍历一次 单调栈里存放元素的下标i 情况一:当前遍历的元素...
647.回文子串 动规五部曲 确定dp数组(dp table)以及下标的含义 dp[i][j]:表示区间范围[i,j] (注意是左闭右闭)的子串是否是回文子串,如果是dp[i...
583.两个字符串的删除操作 动规五部曲 确定dp数组(dp table)以及下标的含义 dp[i][j]:以i-1为结尾的字符串word1,和以j-1位结尾的字符串word...
392.判断子序列 动态规划五部曲 确定dp数组(dp table)以及下标的含义 dp[i][j] 表示以下标i-1为结尾的字符串s,和以下标j-1为结尾的字符串t,相同子...
1143.最长公共子序列 动规五部曲 确定dp数组(dp table)以及下标的含义 dp[i][j]:长度为[0, i - 1]的字符串text1与长度为[0, j - 1...
300.最长递增子序列 动规五部曲 dp[i]的定义 dp[i]表示i之前包括i的以nums[i]结尾的最长递增子序列的长度 状态转移方程 位置i的最长升序子序列等于j从0到...
309.最佳买卖股票时机含冷冻期 动规五部曲 确定dp数组以及下标的含义 dp[i][j],第i天状态为j,所剩的最多现金为dp[i][j] 状态一:持有股票状态 状态二:保...
123.买卖股票的最佳时机III 动态规划五部曲 确定dp数组以及下标的含义 一天一共就有五个状态, 没有操作 (其实我们也可以不设置这个状态) 第一次持有股票 第一次不持有...
121.买卖股票的最佳时机 动规五部曲 确定dp数组(dp table)以及下标的含义 dp[i][0] 表示第i天持有股票所得最多现金 dp[i][1] 表示第i天不持有股...
198.打家劫舍 当前房屋偷与不偷取决于 前一个房屋和前两个房屋是否被偷了 动规五部曲 确定dp数组(dp table)以及下标的含义 dp[i]:考虑下标i(包括i)以内的...
139.单词拆分 转化为背包问题: 单词就是物品,字符串s就是背包 动规五部曲 确定dp数组以及下标的含义 dp[i] : 字符串长度为i的话,dp[i]为true,表示可以...
完全背包 与01背包差别是物品可以重复用,那么在遍历容量就要从小到大遍历 // 先遍历物品,再遍历背包for(inti=0;i<weight.size();i++){// 遍...
1049.最后一块石头的重量II 关键将一堆石头分成两份,近可能接近平均值 动规五步曲: 确定dp数组以及下标的含义 dp[j]表示容量(这里说容量更形象,其实就是重量)为j...
01背包问题 分为二维数组和一维数组,一维有点绕 416.分割等和子集 动规五部曲: 确定dp数组以及下标的含义 01背包中,dp[j] 表示: 容量为j的背包,所背的物品价...
343.整数拆分 动规五部曲: 确定dp数组(dp table)以及下标的含义 dp[i]:分拆数字i,可以得到的最大乘积为dp[i] 确定递推公式 dp[i] = max(...
62.不同路径 动规五部曲: 确定dp数组(dp table)以及下标的含义 dp[i][j] :表示从(0 ,0)出发,到(i, j) 有dp[i][j]条不同的路径。 确...