62.不同路径题目链接:力扣(LeetCode)官网-全球极客挚爱的技术成长平台求解思路:动规五部曲确定dp数组及其下标含义:dp[i][j]表示从(0,0)出发,到(i,j)有dp[i][j]条路径确定递推公式:只能从左边或上边过来,因此dp[i][j]=dp[i-1][j]+dp[i][j-1]dp数组的初始化:第一行和第一列都初始化为1,因为从原点到[i][0]或[0][j]的路径只有一条确定遍历顺序:因为当前值从上方和左方推导而来,因此从左到右,从上到下遍历举例推导dp数组:如图所示代码:classSolution{public:intuniquePaths(intm,intn){ve
文章目录139.单词拆分1.dp含义2.递推3.初始化4.遍历顺序198.打家劫舍1.dp含义2.递推3.初始化4.遍历顺序213.打家劫舍Ⅱ337.打家劫舍Ⅲ121.买卖股票的最佳时机贪心算法动态规划1.dp含义2.递推3.初始化4.遍历顺序122.买卖股票的最佳时机Ⅱ123.买卖股票的最佳时机Ⅲ1.确定dp数组以及下标的含义2.递推公式dp[i][0]dp[i][1]:第一次持有dp[i][2]:第一次不持有dp[i][3]:第二次持有dp[i][4]:第二次不持有3.初始化188.买卖股票的最佳时机Ⅳ309.买卖股票的最佳时机含冷冻期**1.确定dp数组以及下标的含义**2.递推dp[i
目录Leetcode110.平衡二叉树Leetcode257.二叉树的所有路径Leetcode 404.左叶子之和Leetcode110.平衡二叉树题目链接:Leetcode110.平衡二叉树题目描述:给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点的左右两个子树的高度差的绝对值不超过1。思路:由于本题是比较左右子树高度差,因此使用后序遍历更合适。分别求出其左右子树的高度,然后如果差值小于等于1,则返回当前二叉树的高度,否则返回-1,表示已经不是二叉平衡树了。代码如下:(递归法)classSolution{public:intgetHeight
目录242有效的字母异位词349两个数组的交集202快乐数1两数之和242有效的字母异位词排序classSolution{public:boolisAnagram(strings,stringt){sort(s.begin(),s.end());sort(t.begin(),t.end());returnt==s;}};时间复杂度O(nlogn)空间复杂度O(logn)哈希表 classSolution{public:boolisAnagram(strings,stringt){if(s.size()!=t.size())returnfalse;vectortable(26,0);for(ch
1.代码随想录-动规8.LC343整数拆分题目链接dp数组含义:dp[i]表示拆分i的最大乘积递推公式:dp[i]=max(j*(i-j),j*dp[i-j],dp[i])解释:从1遍历j,有两种渠道得到dp[i].一个是j*(i-j)直接相乘。一个是j*dp[i-j],相当于是拆分(i-j)为何不拆分j:j是从1开始遍历,拆分j的情况,在遍历j的过程中其实都计算过了比如:dp[7]拆分3和dp[4],为什么不拆分3?因为dp[7]拆成1和dp[6]的时候就已经拆3了(1+2+4)初始化:dp[0]=0;dp[1]=0;dp[2]=1;遍历终止条件:拆分一个数n使之乘积最大,那么一定是拆分成m
代码随想录算法训练营第41天|动态规划part03●343.整数拆分●96.不同的二叉搜索树题目一343.整数拆分给定一个正整数n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化。返回你可以获得的最大乘积。示例:输入:10输出:36解释:10=3+3+4,3×3×4=36。说明:你可以假设n不小于2且不大于58。本题拆分的两个关键:拆成多少个,以及拆的数怎么分配。数当然是所有数越接近乘积最大,关键在于分解的数目。来看一下如何使用动规来解决。dp[n]:拆分数字n得到的最大乘积。dp[i]最大乘积是怎么得到的呢?其实可以从1遍历j,然后有两种渠道得到dp[i].一个是j*(i-j)直接相
LeetCode454四数相加Ⅱ题目链接:四数相加Ⅱ文章链接:四数相加Ⅱ视频链接:四数相加Ⅱ思路因为C++还在学习中,还没到set和map这里,所以就先看视频了。不过这题肯定有暴力的解法,就是用四个for循环遍历所有的情况,用count记录,然后count++,最终返回count即可,但时间复杂度是n的四次方,不太建议这么做。--------------------------------------------------------以下是看完视频总结的思路--------------------------------------------------------大体的思路是这样的,四个
目录一、今日心得感悟 1、数组从小到大排序①冒泡法--时间复杂度:O(nlogn)②使用排序函数qsort--时间复杂度:O(nlogn) ③两端->中间(双指针法) --时间复杂度:O(n)④归并排序(双指针法)--时间复杂度:O(n) 2、二维数组的访问及动态分配 3、时间复杂度 4、滑动窗口二、题目977.有序数组的平方 题目链接 想法 代码实现(未看视频/题解) 遇到的问题209.长度最小的子数组 题目链接 想法 代码实现(未看视频/题解)
文章目录977.有序数组的平方双指针思路代码209.长度最小的子数组暴力解法滑动窗口:star:59.螺旋矩阵思路代码977.有序数组的平方题目LeetCode977.有序数组的平方双指针思路由于平方后两边的元素最大,中间的元素最小,所以可以使用双指针。定义left指向原数组最左边,right指向原数组最右边比较left元素的平方和right元素的平方left元素平方大于right元素平方,将left元素平方放在结果集最后,left++right元素平方大于left元素平方,将right元素平方放在结果集最后,right–代码int*sortedSquares(int*nums,intnums
目录977有序数组的平方209长度最小的子数组59螺旋矩阵||977有序数组的平方 先使数组存储递减序列,最后反转数组使其非递减classSolution{public:vectorsortedSquares(vector&nums){intl=0,r=nums.size()-1;vectorres(nums.size());inti=0;for(inti=0;iabs(nums[l])){res[i]=nums[r]*nums[r--];}else{res[i]=nums[l]*nums[l++];}}reverse(res.begin(),res.end());returnres;}};时