自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(44)
  • 收藏
  • 关注

原创 1162地图分析

四个陆地点进queue,四个都bfs,然后更新每个海洋点的最短陆地距离,最后找出最大的海洋点。每个海洋点作为起点bfs找到去陆地的最短路径,找出所有海洋点最大的最短路径。

2023-10-27 19:09:05 114

原创 k个相等的子集

创建一个新的新k大小空数组,回溯每次加入一个nums,如果加入任何一个nums失败就false。因为本身就是sum除以k的target,能全部塞进去就是成功了。k个即确定目标target = sum/k。nums中有大于target的数。都不大于顺便先把等于的去掉k--target非整数 false。

2023-10-27 15:46:10 65

原创 Dijkstra算法

3将所有其他p为false的剩下d[i] 更新为 d[i] 和 d[k]+a[i][k] 的min。1首先找到当前的d[i] 的min为本次要确定的d[k]总共m个节点,进行m次遍历每次更新好一个d[i]找到某一结点n和各个其他节点的每个最短距离。a[i][j] 是i节点和j节点的距离。遍历完毕则d[i] 即使最短距离的集合。d[i] 是i节点和n节点的最短距离。2然后将p[k]标记为true。p[i] 是是否访问了该节点。每次遍历节点k的具体行动为,

2023-10-25 23:56:08 132

原创 C++ “&”

如果自己定义的新void dfs(vector<vector<bool>>一定要加这个&不然visited不会随着改变。如果想该对象跟着函数变化一定要加“&”在题目函数里面定义的 例如。

2023-10-19 18:09:22 117

原创 DAY57

新的dp定义:不再能直接得出结果,直接设置结果为dp无明显递推关系布尔类型的dp[i][j]:表示区间范围[i,j] (注意是左闭右闭)的子串是否是回文子串,如果是dp[i][j]为true,否则为false递推公式 如果ij不相等 则dp[i][j] = false; 相等则看dp[i-1][j+1]以及判断j和i是否同一个数或相邻不相等取max忘记了

2023-09-19 21:56:37 74

原创 DAY55-56

不相等是 添加(dp[i][j] = dp[i][j-1] + 1),替换(dp[i][j] = dp[i-1][j-1] + 1),删除(dp[i][j] = dp[i-1][j] + 1)三选一。dp[i][[j]相等的时候还是左上角 不相等的时候取上面和左边的min。“用t去凑齐s”=>dp[i][j] i-1的t能凑多少个j-1的s。dp[i][j] s长度i t长度j时候是否为子序列。,只要列出来三种的递推公式取min自动选!dp[i][j] 如果是子序列。dp的定义还是跟上一题一样,

2023-08-30 23:54:49 24

原创 DAY52-53

前一题要跟每个前置dp比较,这个只需要跟前一个比较就行了,如果没有递增就又回到1。想复杂了想成最长重复子序列了(不相邻)本题是相邻的,所以dp找左上方的+1即可。跟前面一题一模一样,连线不相交==按一个顺序。dp[i]表示:以nums[i]674. 最长连续递增序列。每个dp[i]取所有i之前的。dp[i]代表nums[i]718. 最长重复子数组。1143.最长公共子序列。因为dp[i][j]是用上。300.最长递增子序列。的最长递增子序列的长度。还是找左上角就行了!1035.不相交的线。

2023-08-27 13:22:20 30

原创 DAY50-51

加上冷冻期共有四种状态!真难分清楚啊,关键在于冰冻期就固定了有一天卖出。就是之前的无限买卖股票 加一个-fee就完事了。所以dp每一行就有五格,然后再看是否能够滚动。k次就是直接写一个for把2搞成k就行了。714.买卖股票的最佳时机含手续费。123.买卖股票的最佳时机III。309.最佳买卖股票时机含冷冻期。188.买卖股票的最佳时机IV。一天一共就有五个状态!2未持有:昨天已经未持有。3今天卖出(明天冷冻期),今天刚持有(昨天是。

2023-08-26 14:28:37 26

原创 day48-49

198.打家劫舍dp-max 偷或者不偷本次的基本操作。

2023-08-25 19:46:24 29

原创 DAY46

5步走。

2023-08-24 19:17:07 31

原创 day44-45

因为是求min所以初始值得设置为dp(amount+1,INT_MAX)之前的斐波那契数,现在的完全背包求排列。相比上一题就是求组合变成了求排列。518. 零钱兑换 II。377. 组合总和 Ⅳ。70. 爬楼梯 (进阶)背包则是for哪个在外。尝试自己做那必然是AC。

2023-08-22 20:04:00 55

原创 day43

就是分割等和字串啊,就是return dp[target]==target 变成了 return sum-dp[target]*2。==>加的集合和减的集合==>加的集合=target+减的集合。由于m和n是一个两维背包,所以总共三维!==>加的集合=(target+sum) /2。用0-i 和为j(就大胆的直接设答案为dp)1049. 最后一块石头的重量 II。==>减的集合=sum-加的集合。是否能使到达target的。"尽量分成等和的两堆"就是想办法把题目转化为。背包==>用或者不用。

2023-08-21 22:36:28 30

原创 DAY42

所以递归公式: dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - weight[i]] + value[i]);分割等和子集 ==> 怎么样在sum/2体积的背包下装满==>装最多value=本身的数字。背包 ==> 怎么样在w体积的背包装下最多value的石头。416. 分割等和子集。

2023-08-21 15:49:50 24

原创 DAY41

贪心就是无限找3直到剩个4,因为3和2是唯二自身比dp大的,3又比2大,所以就无限找3当因子就行了,就是最后一个3和1没有4本身大=两个2.,然后左右的情况数量就是各自的dp[i],然后两边相乘就是这个节点做根的全部情况,每个节点做一次根就出来了。dp就是i个数的最大乘积,就是两层for笨蛋寻找,因为第二层for。找一半就行了,因为因子肯定没有一半那么大,,另一个就已经在前面的table里面了,dp就是i个节点的二叉搜索树的情况数量。96.不同的二叉搜索树。中间等分相乘是错的,

2023-08-19 20:08:39 23

原创 DAY39

2.上面和左边的相加 dp[i] = dp[i](前一次循环 = 上面的)+dp[i-1](左边的);转化为m+n-2(这么多步)中任选m-1个数(什么时候向下)就是多一步检测obstacle 其他的同上。1.到每个格子的路径数,for m次循环。63. 不同路径 II。

2023-08-17 18:42:18 23

原创 DAY38

贪心是每次选择互不相干只看当前最优,动态规划是决定和决定之间互相干涉?509. 斐波那契数确定dp数组以及下标的含义确定递推公式dp数组如何初始化确定遍历顺序举例推导dp数组70. 爬楼梯1. i层楼梯有 dp【i】种爬法2.等于dp[i-1]怕一层或者dp[i-2]爬两层,所以dp[i] = dp[i-1] + dp[i-2]关键:由每次能走1/2步 想到 dp[i] = dp[i-1] + dp[i-2]746. 使用最小花费爬楼梯1.i层楼最少花多少钱。

2023-08-17 11:51:43 26

原创 DAY37

局部最优。

2023-08-16 19:39:39 28

原创 DAY36

又用到了hash,能数组则数组,int hash[27] = {0};/ ‘hash['i'-'a'] = ....所以只能在for 里面把bound更新为。,就又是气球题了,不用局限于sort。,因为分割至少得在这个区间之后了。新运用:lamda表达式。435. 无重叠区间。763.划分字母区间。一头雾水,但先遍历一遍。back()的新运用。

2023-08-15 18:36:11 25

原创 day35(sort(cmp))

但使用vector是非常费时的,C++中vector(可以理解是一个动态数组,底层是普通数组实现的)如果插入元素大于预先普通数组大小,vector底部会有一个扩容的操作,即申请两倍于原先普通数组的大小,然后把数据拷贝到另一个更大的数组上。所以使用vector(动态数组)来insert,是费时的,插入再拷贝的话,单纯一个插入的操作就是O(n^2)了,甚至可能拷贝好几次,就不止O(n^2)了。其实跟我思路一样,但是直接总从大到小排序,k小的靠前,然后直接依次插入,就和我的按k分组排序再从小到大插入一样了。

2023-08-03 13:30:29 29

原创 day34

rest 清零,从start = i+1重新开始累加,因为解是唯一的,如果有就是start。先求出只要求相邻的左<右则右边糖果多的情况 (先序,因为要从左到右累加)然后再只要求相邻的左>右则左边糖果多的情况(后序,因为要从右到左累加)AB都是构建的最小AB 所以max AB也是最小max 所以也是最小X。遍历用每天的剩余抵消那个最小值,哪一天抵消了就是哪一天。累加总耗差的同时,计算当前rest,start=0。倒序(因为起点到产生最小负值之间的已经排除了)随意的从起点遍历,在看总油耗的时候找到。

2023-08-01 23:29:06 21

原创 day32.

纠结了一会,但还是想出来了,关键就在于老是误解能跳j步是所有<=j步都可以,所以每一步都产生一个范围,每个范围到另一个范围可以最小只用一步。算出第一步的范围==>step++,看够不够==>不够,算出第二步的范围==>step++,看够不够...我的思路下滑的前一天卖出之前的最高值,下滑前一天为一个局部==>模拟购买和出售逻辑。把0步到和一步到都看左特殊情况,默认就是一步到不了,从两步的范围开始循环,每次算完一个步伐范围的时候才看够不够,第一步则直接看范围。感觉贪心好符合我的思路。

2023-07-31 19:43:54 20

原创 day31.

最大饼干先找最大孩子(sort)==>每一次的局部最优。最小的饼干如果连最小的胃口都满足不了,这个饼干就可以。按小孩来 按饼干来的话for里面还得套while。最大的胃口如果最大的饼干都满足不了,这个胃口就可以。写过这题当时还不知道这叫贪心算法。判断前一个点大于小于0可以用。即可去掉一直是一个值的情况。一些节点达成摆动序列。==>局部去掉上下坡。==>整体保留全部的。

2023-07-31 15:30:04 22

原创 day30.

回溯的办法很好想,就是每加入一个皇后一层,就是如何去掉同行列斜的方法想不具体。<出发string,map<到达string,剩余票数int>>,记录所有图的出发和到达每一层直接根据出发一步找到可能的到达,2.因为是从上往下放,只检查上方的列和左上右上的斜角就行了。比起每一次找下一站的那一层一张一张票找==>直接一个。每一层找到最左最上的空位填数==>每层试九种可能。所以回溯返回值是bool==>是直接按字母顺序开始查找的!填一个数一层,就是这么多层!332.重新安排行程。

2023-07-28 19:11:58 30

原创 day29.

此时的used只能通过加进()里记录==>void backtrack(vector<int> nums,vector<int>& used)定义一个vector<int> used(nums.size(),0);没办法public vector<int> used。==> vector<bool>好像更省空间。每第几个数视为第几层+去重+判断是否递增。来记录{-100,100}的使用情况。很多)这种定义必须是明确的数字201。的used情况(前一题是记录横向)所以不用pop==>用了两个used可以。

2023-07-27 18:20:16 16

原创 day28.

终止是到达第四层=>三个逗点=>直接判断当前到size()是否valid。先想象一个树,ip地址的四个整数为四层(实际三层)回溯的if去掉每次直接返回就行。直接在string上。

2023-07-26 18:35:18 21 1

原创 day27.

vector used(nums.size(),false)不这样初始化的话容易超出,应该用continue:if(target - candi[i] < 0) continue;剪枝里面加个判断&&target-nums【i】>0是错的!如果遇到不满足for直接出去了。,true就是纵向的,false就是回溯回来了i++了所以是横向的。不用used int i>start也能判断是同层还是纵向。substr(起点下标,长度);完再加个判断能快很多。

2023-07-25 17:58:11 15

原创 DAY25.

第二个数的选项 2 3 4... 2 3 4... 2 3 4...回忆模板写很好写,剪枝也想出来了(一个是for里面的一个是一但大于targetsum就返回)(lettermap是起的名字,const也可以去掉)第一道回溯,想到了回溯树,但具体怎么转化为回溯还是看了教程。一种是我的i<targetsum-sum。216.组合总和III。一种是和前一题一样的。

2023-07-24 22:24:55 16

原创 day23.

用一个create(tree,int left,int right){}省掉两个vector的空间。用的public int传递的减去前一个数的int。注意:大于等于当前值的和所以是总和减去前一个数。108.将有序数组转换为二叉搜索树。538.把二叉搜索树转换为累加树。669. 修剪二叉搜索树。

2023-07-23 10:57:33 23

原创 day22.

235. 二叉搜索树的最近公共祖先遇到在pq的区间就行了?

2023-07-22 16:56:04 21

原创 day21.

530.二叉搜索树的最小绝对差搜索树==>!or中序遍历的过程中直接用public int min 计算出min需要一个!放在当前遍历操作的后面即是pre又写成了只比较left和right node501.二叉搜索树中的众数如果不是搜索树==>频率==>==>key数字value次数是搜索树==>中序遍历有序==>int max 反复与max比较等于加入大于再加入。

2023-07-21 19:15:46 16 1

原创 day20.

但在程序加上int left/right 少构建两个vector<int>节省空间。还能再快一点,因为单null return null 已经包含这一句了。有序遍历迭代直接就是while不需要借用栈。直接掉进只判断当前左右子树大小的陷阱这样。又写出来咯,但很多重复句式,直接一个。700.二叉搜索树中的搜索。直接在root1上面改动还能。98.验证二叉搜索树。

2023-07-19 20:47:03 22

原创 day18.

新vector的定义 vector<int> in1(inorder.begin(),inorder.begin()+i);新node的定义 TreeNode* root = new TreeNode(now);要想到就是找最下面一层的最左侧==>找深度最大的点==>前序遍历找深度不断找。,if(left)里面if(sum())直接return true就出来了。递归写出来咯,把值放进框里的隐藏回溯会咯。for()或{}里面定义的元素在外面都。的了(最右侧就先if(right))3.找到后序对应的两半。

2023-07-19 16:32:06 24

原创 day17.

到叶子的时候就把这个路径做成一个string放进result,然后。如果不平衡就返回-1===>直接看最后是不是-1来bool。新创建一个void path去遍历并把路径输入一个。迭代:创建两个栈 一个该节点一个是到该节点的路径。如果要反复比较两个数,最好先把这两个数算出来。257. 二叉树的所有路径。可以从上到下去查 所以需要。只能从下到上去查,所以只能。继续往下一个叶子遍历。

2023-07-16 17:21:02 24 1

原创 day16.

104.二叉树的最大深度递归:最大深度->根的高度->根的高度就是or层序遍历or先序遍历:用一个public int result记录深度另外创建一个min(Treenode,int depth)通过改动depth对应result来最终return result,depth每找到左或右节点++

2023-07-15 18:25:21 19 1

原创 day15.

while有层for每一层层序遍历用列表,我的指针法在没有right的情况下不攻自破了,但用left好像可以懒得试了。, 递归swap每一个节点就行了先后序都行,中序不行(只反转了左子树)为什么老是没有while里面套for 的思维?,每次compare都乘2符合2×树的增加频率。每一种情况都要想全 左右都空 其一空 都不空。101. 对称二叉树 (优先掌握递归)226.翻转二叉树 (优先掌握递归)比较当前两个然后递归到compare。只要含有除法/就得用double。翻转->翻转每个节点->遍历。

2023-07-15 15:50:27 11 1

原创 day14.

二叉树二叉树所以map、set的增删操作时间时间复杂度是logn。

2023-07-13 21:00:16 17 1

原创 day13.(优先队列)

栈是容器适配器,底层容器使用不同的容器,导致栈内数据在内存中是不是连续分布。缺省情况下,默认底层容器是deque。

2023-07-13 17:07:31 15 1

原创 day10day11

新学了queue的front() back() empty() size() pop(from front)() push(from back)()新学了栈的基本功能.push(x).empty().top().pop() 同一个打框架下比如peek引用pop可以。判断句 if (string[i]==sea.top())会报错。来定义,(stack<long long>)如果栈stack<char> sea是。栈的经典应用要想到用栈进去左括号。150. 逆波兰表达式求值。232.用栈实现队列。

2023-07-11 15:55:06 22

原创 day8.

这里开始给反转加上了一些条件,当需要固定规律一段一段去处理字符串的时候,要想想在for循环的表达式上做做文章。151.翻转字符串里的单词 (试图使空间O(1)版即原字符操作)tips:在C语言中,把一个字符串存入一个数组时,也把结束符。,第一次讲到反转一个字符串应该怎么做,使用了双指针法。剑指Offer58-II.左旋转字符串。剑指Offer58-II.左旋转字符串。中,要对一句话里的单词顺序进行反转,忘了考虑最后一个单词的反转要加一个。for里面i不一定要一个一个加,i--不能放到if里面去了。

2023-07-07 19:17:22 25 1

原创 day6day7

这两天偷懒了。

2023-07-06 23:31:18 33 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除