part02专题

代码随想录算法训练营第20天 | 第七章 回溯算法 part02

第七章 回溯算法 part02 39. 组合总和40. 组合总和 IIstartIndex去重bool used去重 131. 分割回文串 39. 组合总和 本题是集合里的元素可以重复使用无数次,与组合问题的差别主要在于 startIndex 的控制。 题目链接/文章讲解:组合总和视频讲解:点击观看 递归边界: 当 sum > target 时,直接返回,不再继续递归。

夸父追日:第八章 贪心算法 part02

今日收获:买卖股票的最佳时机II,跳跃游戏,跳跃游戏Ⅱ,K次取反后最大化的数组和 1. 买卖股票的最佳时机II 题目链接:122. 买卖股票的最佳时机 II - 力扣(LeetCode) 思路:收集每天的正利润(局部最优),如果这天亏了就不收集。重点是有一个思路上的转变,将最低买入和最高卖出,转化为收集每一天的利润。 方法: class Solution {public int maxP

夸父追日:第七章 回溯算法part02

今日收获:组合总和,组合总和Ⅱ,分割回文串 代码随想录:for循环横向遍历,递归纵向遍历,回溯不断调整结果集。 1. 组合总和 题目链接:39. 组合总和 - 力扣(LeetCode) 思路:和216. 组合总和 III - 力扣(LeetCode)很像,不同之处在于可以重复选择当前元素,所以递归时start不用+1 方法: class Solution {List<Integer>

代码随想录day 14:第六章 二叉树 part02

翻转二叉树 原则:其实只需要代码能访问到每一个节点,然后swap左右孩子就好了. 递归法 用递归的思想来深度遍历访问每个节点,然后swap每个访问到的节点 class Solution {public:void traversal(TreeNode* cur){if(cur==NULL) return;swap(cur->left,cur->right);traversal(cur->l

day39||第九章 动态规划part02

62.不同路径 class Solution {public int uniquePaths(int m, int n) {int[][] dp = new int[m][n];for(int i =0;i<m;i++) dp[i][0] = 1;for(int j =0;j<n;j++) dp[0][j] = 1;for(int i =1;i<m;i++){for(int j = 1;

day32贪心算法part02| 122.买卖股票的最佳时机II 55. 跳跃游戏 45.跳跃游戏II

122.买卖股票的最佳时机II 本题解法很巧妙,大家可以看题思考一下,在看题解。 题目讲解 | 题目链接 class Solution {public:int maxProfit(vector<int>& prices) {int result = 0;for (int i = 1; i < prices.size(); i++) {// 直接看两天之间的差值,将所有为正的加和int p

day25回溯算法part02| 216.组合总和III 17.电话号码的字母组合

216.组合总和III 题目链接/文章讲解 | 视频讲解 class Solution {public:vector<vector<int>> result;vector<int> path;int sum;void backtracking(int n, int k, int startindex) {// int sum = accumulate(path.begin(), path

动态规划part02 Day42

LC62不同路径 LC63不同路径II(超时10min) 超时原因分析:思路想错了,即便是正确思路初始化也有点问题,应该将不必要的判断逻辑引入初始化的过程中初始化: 从左上角到[i][0]和[0][j]都只有一条路径dp[i][0]=1和dp[0][j]=1引入故障,因此还需要obstacleGrid[i][0]==0和obstacleGrid[0][j]==0 循环过程中,如果存在左边或

day15二叉树part02 | 层序遍历 10 226.翻转二叉树 101.对称二叉树 2

层序遍历 10 class Solution {public:vector<vector<int>> levelOrder(TreeNode* root) {queue<TreeNode*> que;;if (root == nullptr) return {};vector<vector<int>> result;// 根节点入队que.push(root);// 如果队列不为空whi

代码随想录算法训练营Day 39| 动态规划part02 | 62.不同路径、63. 不同路径 II

代码随想录算法训练营Day 39| 动态规划part02 | 62.不同路径、63. 不同路径 II 文章目录 代码随想录算法训练营Day 39| 动态规划part02 | 62.不同路径、63. 不同路径 II62.不同路径一、动态规划二、递归 63. 不同路径 II一、动态规划 62.不同路径 题目链接 确定dp数组以及下标的含义 dp[i][j] :表示从(

【随想录】Day32—第八章 贪心算法 part02

目录 题目1: 买卖股票的最佳时机 II1- 思路2- 题解⭐买卖股票的最佳时机 II ——题解思路 题目2: 55. 跳跃游戏1- 思路2- 题解⭐跳跃游戏 ——题解思路 题目3: 45. 跳跃游戏 II1- 思路2- 题解⭐跳跃游戏 II ——题解思路 题目1: 买卖股票的最佳时机 II 题目链接:122. 买卖股票的最佳时机 II 1- 思路 贪心:

Day32代码随想录贪心part02:122.买卖股票的最佳时机II(主要是动态规划,少数可以用贪心)、55. 跳跃游戏)、45.跳跃游戏II

Day32 贪心part02 122.买卖股票的最佳时机II(主要是动态规划,少数可以用贪心) **题意:**给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。 示例 1: 输入: [7,1,5,3,6,4]输出: 7解

java算法day59 | 单调栈part02 ● 503.下一个更大元素II ● 42. 接雨水

503.下一个更大元素II 思路: 相比于单纯寻找下一个最大元素,要遍历两边数组,注意i%nums.length。 class Solution {public int[] nextGreaterElements(int[] nums) {int[] res=new int[nums.length];for(int i=0;i<res.length;i++){res[i]=-1;}Dequ

【随想录】Day25—第七章 回溯算法part02

目录 题目1: 组合总和 III1- 思路2- 题解⭐ 组合总和 III ——题解思路 题目2: 电话号码的字母组合1- 思路2- 题解⭐ 电话号码的字母组合 ——题解思路 题目1: 组合总和 III 题目链接:216. 组合总和 III 1- 思路 借助 path 和 res 数据结构收集结果 回溯三部曲 回溯参数及返回值 回溯终止条件 && 结果收集

代码随想录|Day39|动态规划 part02|● 62.不同路径 ● 63. 不同路径 II

62.不同路径  class Solution:     def uniquePaths(self, m: int, n: int) -> int:         dp = [[1] * n for _ in range(m)]  #如何构建一个矩阵         for i in range(1, m):             for j in range(1, n):

Day32|贪心算法part02:122.买卖股票的最佳时机II、55. 跳跃游戏、45. 跳跃游戏II

122. 买卖股票的最佳时机II 这题应该是dp的主菜,II的要求是可以无限次买无限次卖,可以用贪心做,想了下没想到思路,直接看题解。 贪心策略: 一直统计每次的差值,只要为负,不卖出,选择正才卖出。 局部最优:统计每天的利润,遇到正数收集起来;全局最优:局部最优加起来。 class Solution {public int maxProfit(int[] prices) {int re

代码随想录 day39 第九章 动态规划part02

●  62.不同路径 ●  63. 不同路径 II 1. 不同路径 关联 leetcode 62. 不同路径  思路 二维矩阵:二维dp数组 dp数组以及下标的含义 dp[i][j] : 走到 (i,j) 这个位置有多少种不同路径 递推公式 //机器人只能 向右走 或 向下走dp[i][j]=dp[i-1][j]+dp[i][j-1] dp数组如何初始化 //最

代码随想录训练营第三十五期|第2天|数组part02|977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II ,总结

977. 有序数组的平方 - 力扣(LeetCode) class Solution {public int[] sortedSquares(int[] nums) {int[] res = new int[nums.length];int idx = nums.length - 1;int left = 0;int right = nums.length - 1;while (left <=

day63 单调栈part02

503. 下一个更大元素 II 中等 给定一个循环数组 nums ( nums[nums.length - 1] 的下一个元素是 nums[0] ),返回 nums 中每个元素的 下一个更大元素 。 数字 x 的 下一个更大的元素 是按数组遍历顺序,这个数字之后的第一个比它更大的数,这意味着你应该循环地搜索它的下一个更大的数。如果不存在,则输出 -1 。 思路 一开始我也想的用俩数组拼,然

Day39 动态规划 part02

Day39 动态规划 part02 62.不同路径 我的思路: 需要想到dp[i][j] = dp[i - 1][j] + dp[i][j - 1],以及初始化mxn矩阵,第一行和第一列均初始化为1 解答: class Solution {public int uniquePaths(int m, int n) {int[][] dp = new int[m][n];for(int j =

java算法第32天 | 贪心算法 part02 ● 122.买卖股票的最佳时机II ● 55. 跳跃游戏 ● 45.跳跃游戏II

122.买卖股票的最佳时机II 本题中理解利润拆分是关键点! 不要整块的去看,而是把整体利润拆为每天的利润。假如第 0 天买入,第 3 天卖出,那么利润为:prices[3] - prices[0]。 相当于(prices[3] - prices[2]) + (prices[2] - prices[1]) + (prices[1] - prices[0])。 一旦想到这里了,很自然就会

Day15.二叉树part02: 层序遍历、226.翻转二叉树 、 101. 对称二叉树

Day15.二叉树part02: 层序遍历、226.翻转二叉树 、 101. 对称二叉树 102.二叉树的层序遍历 原题链接 代码随想录链接 刚开始看的时候感觉不会写,因为一直对树的算法题很抵触就是感觉自己搞不明白,不过现在就感觉干就完了! 不会写的时候去看了卡哥的解析,当提示到可以使用队列来写的时候我脑子里就瞬间有了想法,这不是和昨天的二叉树迭代遍历有点类似吗,于是自己去想好了思路写完

代码随想录算法训练营第33期第五章 栈与队列part02

20. 有效的括号 给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。每个右括号都有一个对应的相同类型的左括号。 示例 1: 输入:s = "()" 输出:true 示例 2: 输入:s = "()[]{}" 输出:true 示例 3: 输入:s = "(]" 输

Day11:栈与队列part02:20. 有效的括号、1047.删除字符串中所有相邻重复项、150. 逆波兰表达式求值

https://blog.csdn.net/weixin_43303286/article/details/131869968?spm=1001.2014.3001.5501 有效的括号 遇见左括号对应的右括号进栈,遇到右括号看栈顶,不相同就返回false class Solution {public boolean isValid(String s) {Stack<Character>

day32 第八章 贪心算法 part02● 122.买卖股票的最佳时机II ● 55. 跳跃游戏 ● 45.跳跃游戏II

一遍过。如果一开始第二个元素比第一个元素小,就选择第二个元素开始,这样买入价低,反之则是加上第二个元素和第一个元素的差价,并从第二个元素开始,比较第三个元素和第二个元素的相对大小关系。 class Solution {public:int maxProfit(vector<int>& prices) {int total=0;int res=0;int st=prices[0];int

代码随想录算法训练营day59|第十章 单调栈part02

目录 503.下一个更大元素II  42. 接雨水     503.下一个更大元素II  这道题和 739. 每日温度 几乎如出一辙,可以自己尝试做一做   代码随想录 这道题可以直接拼接数组,但是显然使用取余运算更划算。注意这回 i 代表的不直接是nums的下标,而更多的是遍历次数,取余之后才会是nums下标。还有文章里面给出的for的循环次数是nums.size()*2-