寒假算法训练营
天天向上的菜鸡杰!!
生活明朗 万物可爱 人间值得 全力以赴
展开
-
leetcode977. 有序数组的平方
一:题目二:上码(双指针+暴力)暴力class Solution {public: vector<int> sortedSquares(vector<int>& nums) { vector<int> ans; for(auto temp:nums) { ans.push_back(pow(temp,2)); } sort(ans.begin(),ans原创 2022-03-24 18:29:44 · 86 阅读 · 0 评论 -
leetcode27. 移除元素
一:题目二:上码class Solution {public: int removeElement(vector<int>& nums, int val) { /** 使用快慢指针 快指针正常移动,当快指针指向的值不等于val时就将值赋值满指针,如果等于val的话就直接跳 */ int fastIndex = 0; int slowIndex = 0;原创 2022-03-24 17:49:45 · 1556 阅读 · 0 评论 -
leetcode367. 有效的完全平方数
一:题目二:上码class Solution {public: /** 完全平方数:若一个数能表示成某个整数的平方的形式,则称这个数为完全平方数 思路:1.我们将num先折半,因为它是某个整数的平方,而这个数的范围肯定不会超过num的一半 2.那么这就相当于在[left,num/2]中查找某个数,其的平方正好可以是num */ bool isPerfectSquare(int num) { if(num == 1) r原创 2022-03-24 17:24:23 · 1112 阅读 · 0 评论 -
leetcode69. x 的平方根
一:题目二:上码class Solution {public: /** 思路:1.因为我们的 ans的平方 <= x 那么我们就可以用二分法来做 不断缩小左右范围来确定 ans **/ int mySqrt(int x) { int left = 0; int right = x; int ans = 0; while (left <= right) {原创 2022-03-24 16:55:57 · 1534 阅读 · 0 评论 -
leetcote34. 在排序数组中查找元素的第一个和最后一个位置
一:题目二:上码(暴力+二分)// class Solution {// public:// /**// 思路:1.首先这是一个升序的 那么相同的一定是会相连的// */// vector<int> searchRange(vector<int>& nums, int target) {// int flag = 0;// int start = 0; //原创 2022-03-24 16:16:41 · 165 阅读 · 0 评论 -
leetcode84. 柱状图中最大的矩形
一:题目二:上码class Solution {public: /** 思路: 1.这里单调栈的顺序是 从栈顶到栈底 是递减的 因为我们在求出 比栈顶下标所对应的元素的小的元素时候 要将栈顶元素出栈 此时 新的栈顶元素(left) 和 已出的栈顶元素(mid) 以及 height[i] (right) 这是时候我们可以进行一次求取最值的 ans = max(anx,height[mid]*(原创 2022-03-18 21:25:43 · 215 阅读 · 0 评论 -
leetcode42. 接雨水
一:题目二:上码// class Solution {// public:// /** ===========================超时===================// 思路:// 1.我们按列来计算 这就是表明的是 我们求取接雨水 向上的高度就是雨水量// 但是这里的话我们的需要对雨水的高度 来进行判定// 2.那么如何判定我们所接雨水的高度呢?//原创 2022-03-17 21:40:06 · 274 阅读 · 0 评论 -
leetcode503. 下一个更大元素 II
一:题目二:上码class Solution {public: /** 思路: 1.将两个nums拼接到一块 这里拼接到一块,当我们最后的元素找不到比其大的时候 就会开始从头开始 这样的话就可以继续进行 入栈 或者出栈的操作 入栈就是比我栈顶小的元素,出栈的话 那就是 找到了比其大的元素了 只要我们拼原创 2022-03-17 20:12:00 · 330 阅读 · 0 评论 -
leetcode496. 下一个更大元素 I
二:上码class Solution {public: /** 思路:1.分析题意: 这里是我们在nums1中的元素是全部出现在nums2中的 我们要找的就是 num1[i] == nums2[j] 的话 在nums2[j]中我们要找到右边第一个比其大的元素 2.OK! 那么我们就可知道的是我们就需要用到单调栈了。 3.那么我们是外层循环是 nums1 .原创 2022-03-15 20:31:34 · 314 阅读 · 0 评论 -
leetcode739. 每日温度
一:题目二:上码// class Solution {// public:// vector<int> dailyTemperatures(vector<int>& temperatures) {// vector<int> ans(temperatures.size(),0);// for (int i = 0; i < temperatures.size(); i++) {//原创 2022-03-15 18:32:44 · 745 阅读 · 0 评论 -
leetcode516. 最长回文子序列
一:题目二:上码class Solution {public: /** 思路: 1.分析题意 这个是让我们求最值,那么首先想到动态规划 2.动态规划 1>:确定dp数组以及下标的含义 dp[i][j] 表示字符串在[i,j]范围内的最长回文子序列 2>:确定dp数组的状态递推公式原创 2022-03-15 16:39:30 · 621 阅读 · 0 评论 -
leetcode647. 回文子串
一:题目二:上码class Solution {public: /** 思路: 动态规划五步走 1>:确定dp数组以及下标的含义 dp[i][j] 表示的是在[i,j]范围内的字串 是否是 回文子串,如果是的话那么dp[i][j] = true 2>确定dp数组的状态转移方程 那么就有两种情况 s[i] 与 s[j]是否相等,原创 2022-03-14 23:40:08 · 188 阅读 · 0 评论 -
leetcode583. 两个字符串的删除操作
一:题目二:上码class Solution {public: /** 思路:题目给的是让求最值,那么首先就会想到的是动态规划,我们想得到答案的结果其实有多个的,但是我们是取最小的步数 动态规划 五步走: 1>:确定dp数组以及下标的含义 dp[i][j]表示的是 以下标i-1结尾的字符串word1,和以下标j-1结尾的word2,如果想要两个字符串相等原创 2022-03-14 20:58:22 · 494 阅读 · 0 评论 -
leetcode115. 不同的子序列
一:题目二:代码class Solution {public: /** 思路:动规分析走一波 1>:确定dp数组以及下标的含义 dp[i][j] 表示的是 以下标i-1结尾的子序列s中出现以j-1结尾的子序列t的 个数 2>:确定dp数组的状态递推公式 这里考虑两种状况 一种就是 s[i-1] == s[j-1] 一种就是字原创 2022-03-12 18:51:09 · 216 阅读 · 0 评论 -
leetcode392. 判断子序列
一:题目二:上码class Solution {public: /** 思路: 这是最大公共子序列的缩减版 只要我们求出最大公共子序列的长度,然后和s的进行比较即可 **/ bool isSubsequence(string s, string t) { vector<vector<int> >dp(s.size()+1,vector<int>(t.size()+1,0)原创 2022-03-12 17:18:24 · 675 阅读 · 0 评论 -
leetcode53. 最大子数组和(动态规划)
一:题目二:上码class Solution {public: int maxSubArray(vector<int>& nums) { /** 动态规划: 1>:确定dp数组的含义以及下标的含义 dp[j]表示的是下标j之前的最大子数组和 这个就是还没有包括nums[j] 2>:确定dp数组的状态转移公式 dp[j] = max (dp[j-1]+nums原创 2022-03-12 16:55:04 · 1131 阅读 · 0 评论 -
leetcode1035. 不相交的线
一:题目二:上码class Solution {public: /** 思路: 1.分析题意: 这里的我们要求解的是最大值,那么我们的求解过程肯定是动态变化的,举个例子 2 5 1 2 5 10 5 2 1 5 2 如果我们一开始就让nums1[1] = 5何 nums2[4] = 5 相连的话 那么我们肯定不会求解出最大值 那么题目中的说的直线不相交的其实就是说明了原创 2022-03-12 16:07:33 · 782 阅读 · 0 评论 -
leetcode1143. 最长公共子序列
一:题目二:上码class Solution {public: /** 思路:1.分析题意 这个子序列就是我们是可以不连续的字符组成的 2.动态规划五步走 1>:确定dp数组的含义以及下标的含义 dp[i][j] 表示的是text1中[0,i-1]字符范围,text2中[0,j-1]的字符范围 的最长公共子序列 这里我们取i-1 和 j-1的目的是原创 2022-03-11 18:45:14 · 216 阅读 · 0 评论 -
leetcode718. 最长重复子数组
一:题目二:上码class Solution {public: /** 思路: 1.分析题意: 1 2 3 6 7 4 1 2 6 7 4 3 这里我们先遇到的1 2 但后来我们又遇见了6 7 4 那么我们的要的答案就是动态变化的 2.动态规划五步走 1>:确定dp数组以及下标的含义 dp[i][原创 2022-03-10 16:56:51 · 281 阅读 · 0 评论 -
leetcode674. 最长连续递增序列
一:题目二:上码1:方法一贪心class Solution {public: /** 思路:1.贪心 **/ int findLengthOfLCIS(vector<int>& nums) { int ans = 1; int count = 1; for (int i = 1; i < nums.size(); i++) { if(n原创 2022-03-08 21:32:14 · 261 阅读 · 0 评论 -
leetcode300. 最长递增子序列
一:题目二:上码class Solution {public: /** 思路:1.分析题意: 我们在求取答案的过程中;我们的结果是动态的; 如果从某个数有一个递增序列 但是在这个数的后面 又有一个数又可以是递增的 而且可能还比起长 2.动态规划五步走 1>:确定dp数组的含义以及下标的含义 dp[i] 表示的原创 2022-03-08 20:59:24 · 292 阅读 · 0 评论 -
leetcode309. 最佳买卖股票时机含冷冻期
一:题目二:上码class Solution {public: /** 思路: 1.分析题意 那么我们会有四种状态 0 买入股票(或者说是之前就买入了股票但是也一直没有操作) 1 卖出股票的状态一 两天前就卖出了股票 但是一直没有操作 2 卖出股票状态二 今天卖出股票 3 冷冻期 持续原创 2022-03-05 23:03:05 · 236 阅读 · 0 评论 -
leetcoed123. 买卖股票的最佳时机 III
一:题目二:上码class Solution {public: /** 思路:1.动态规划五步走 1>:确定dp数组以及下标的含义 因为题目给出至多完成两笔交易 那么我们一天的状态就有5种 0 无操作 1 第一次买入 2 第一次卖出 3 第二次买入 4 第二次卖.原创 2022-03-05 21:04:16 · 281 阅读 · 0 评论 -
leetcode337. 打家劫舍 III
一:题目二:上码/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(null原创 2022-03-04 21:04:39 · 630 阅读 · 0 评论 -
leetcode213. 打家劫舍 II
一:题目二:上码class Solution {public: /** 思路: 1.既然成环了,我们如果选取得一条偷取路径是从头开始得那么我们就不能偷取最后一个,那就不算最后一个偷取一遍 2.同理我们也可以不算第一个 偷取一遍计算一次偷取得结果 */ int rob(vector<int>& nums) { if(nums.size() == 0) return 0原创 2022-03-03 22:19:39 · 85 阅读 · 0 评论 -
leetcode198. 打家劫舍
一:题目二:上码class Solution {public: /** 思路: 1.分析题意 首先判断动态规划;能够满足答案的结果有多种;但是我们需要的是最值 那么类似0/1背包 物品是我们不同房间的价值 这个背包容量是我们房间个数 2.动态规划5步走 1>:确定.原创 2022-03-03 21:35:07 · 146 阅读 · 0 评论 -
leetcode139. 单词拆分
一:题目二:上码class Solution {public: /** 思路:1.分析题意 单词就是物品; 字符串就是背包; 单词能否组成字符串就是在问,物品能不能将背包装满 单词可以重复使用那么说明这是一个完全背包 2.动态规划五步走 1>:确定dp数组的与下标的含义(这里用下标i是由我原创 2022-03-02 22:53:05 · 84 阅读 · 0 评论 -
leetcode279. 完全平方数
一:题目二:上码class Solution {public: /** 思路: 1.分析题意 这个就是将一个数分成几个数的和;然而的话,这几个数必须的是完全平方数,我们要求的是最少数量的完全平方数 这个满足答案的有好几个;但是我们要求的是最少的数量 2.动态规划五步走 1>:确定dp数组的含义原创 2022-03-02 21:22:41 · 359 阅读 · 0 评论 -
leetcode322. 零钱兑换
一:论语二:题目三:上码class Solution {public: /** 思路:1.分析题意 这个就是我们从coins数组中找出几个数字(可以重复)然后的话我们是需要找出这个几个数字的和为amount; 那么这个满足答案的结果是可以有多个,但是我们的要求是求取最少的硬币个数 2.动态规划五步走 1>:确定dp数组的含义以及下标的含义原创 2022-03-02 19:49:32 · 209 阅读 · 0 评论 -
leetcode377. 组合总和 Ⅳ
一:题目二:上码1:动态规划class Solution {public: /** 思路:1.首先确定完全背包 因为我们可以重复加入 2.动态规划5步走 1>:确定dp数组以及下标的含义 dp[i] 表示的是背包容量为i的时候(这里的 i 也是就是我们的target),有多少种排列数目 2>:确定dp数组的递推公式原创 2022-03-01 21:40:31 · 162 阅读 · 0 评论 -
leetcode518. 零钱兑换 II
一:题目二:上码class Solution {public: /** 思路:1.分析题意 这个满足答案的结果有很多种,所以我们可以用动态规划去做,那么题意中我们可以知道的是我们是可以输入一种面值 的时候,我们是可以重复输入的,那么这就是背包类型中的完全背包了 2.动态规划5步走 1>:确定dp数组以及下标的含义 d.原创 2022-03-01 20:16:09 · 188 阅读 · 0 评论 -
leetcode474. 一和零
一:论语二:timi三:上码class Solution {public: /** 思路:1.确定动态规划是因为满足的结果的答案不唯一 我们要选取最优的 2.联系背包问题是因为 子集中的元素都是只是用一次 3.动态规划五步走 1>:确定dp数组和下标的含义 dp[i][j]:最多有i个0和j个1的最大子集的大小为 dp[i][j];原创 2022-02-28 21:53:06 · 142 阅读 · 0 评论 -
leetcode494. 目标和
一:论语二:题目三:上码class Solution {public: /** 思路:1.分析题意:这是将原集合分成一个正子集和一个负子集; 例如题目中给出的[1,1,1,1,1], target = 3; 那么我们就可以得出: 加法和就是4,减法和就是1 = 5-4; target: 4-(5-4) = 3; left = (5+3)/2 =原创 2022-02-28 20:44:59 · 97 阅读 · 0 评论 -
leetcode416. 分割等和子集
一:题目二:上码class Solution {public: /** 思路: 1.分析题意 1>.也就是本题需要一个集合的的和 为 总和的sum/2;即这个背包的体积为sum/2 2>.背包要放入的商品(集合里的元素)重量为 元素的数值 价值也为元素的数值 3>.背包如果正好装满的话,那么说明找到了总合为 sum/2的子集;原创 2022-02-26 22:06:09 · 421 阅读 · 0 评论 -
leetcode049. 最后一块石头的重量 II
一:题目二:上码class Solution {public: /** 思路:1.分析题意 只要我们将石头分为尽可能相同的两堆,他们的重量相减后剩余的重量就是最小。 物品的重量为stones[i];物品的价值也为stone[i]; temp代表总重量的一半 那么我们最终得到的stones[temp]:就是背包容量为temp的最大重量为原创 2022-02-26 22:03:23 · 138 阅读 · 0 评论 -
背包(二维数组版和一维数组版)
一:前言这是动态规划的经典题型,那么我们也是 按照动态规划五步走的策略分析的确定dp数组的含义以及下标的含义确定dp数组的递推公式确定dp数组的初始化确定dp数组的遍历顺序举例验证(如果不是做题可省略)二:二维数组1:示例2:dp数组的含义**dp[i][j]**表示的是物品[0,i]放入背包容量为j的时候最大价值3:确定dp数组的递推公式dp[i][j] = max(dp[i-1][j], value[i] + dp[i-1][j-weight[i]])4:初始化5原创 2022-02-23 23:42:08 · 298 阅读 · 0 评论 -
leetcode96. 不同的二叉搜索树
一:题目二:上码class Solution {public: /** 思路:1.分析题意 二叉搜索树(左子树结点小于根节点 根节点小于右节点) n=1时有一种形态,n=0的话,空树也是一种形态 当n=2的时候,二叉树有两种形状 当 n = 3的时候跟结点可以是1,2,3原创 2022-02-21 23:21:15 · 121 阅读 · 0 评论 -
leetcode343. 整数拆分(思路+详解)
一:题目二:上码class Solution {public: /** 思路:1.分析题意: 将一个数拆分为几个数相加的和 然后求取这几个数相乘的最大积,这个就很动态规划 也就是我们可以得到多种结果,要在多种结果中取最优 2.动态规划: 1>:确定dp数组代表啥,以及下标的含义原创 2022-02-20 23:21:02 · 315 阅读 · 0 评论 -
leetcode63. 不同路径 II
一:题目二:上码class Solution {public: /** 思路:1.分析题意: 这里有障碍物,所以我们的做法会有点变化,如果这个障碍物出现在左侧或则右测的话那么我们确定的是 其障碍物包括其后面的下标将均为0,如果障碍物出现在上诉区域外的话,那么就直接dp[i][j] = 0; 2.动态规划五步走 1>:确定dp数组的含义,以及下标的含义。 d原创 2022-02-20 22:01:59 · 289 阅读 · 0 评论 -
leetcode62. 不同路径
一:题目二:上码class Solution {public: /** 思路: 1.分析题意: 2.动态规划五步走: 1>:确定dp数组和其下标的含义 dp[i][j]为到达二维数组下标为i,j的路径条数,i和j为下标 2>:确定dp数组的递推公式 那么dp[i][j]是如原创 2022-02-19 22:39:32 · 194 阅读 · 0 评论