- 博客(43)
- 问答 (1)
- 收藏
- 关注
原创 day 43 动态规划 part05
dp[i][j] 就可以是 dp[i - zeroNum][j - oneNum] + 1。所以递推公式:dp[i][j] = max(dp[i][j], dp[i - zeroNum][j - oneNum] + 1);字符串的zeroNum和oneNum相当于物品的重量(weight[i]),字符串本身的个数相当于物品的价值(value[i])思路:本题物品的重量为stones[i],物品的价值也为stones[i]。求几种方法常用递推公式:dp[j] += dp[j - nums[i]];
2024-03-29 17:11:10 292
原创 day 41 动归 04
第一个时不放物品i,其价值等于在物品i-1时背包在j容量下的最大价值,第二个是放物品i,表示是在i-1物品时,背包在j-weight[i]时的价值加上i物品的价值。物品是nums[i],重量是nums[i],价值也是nums[i],背包体积是sum/2。dp[i][j] 表示在物品i时,背包在j容量下的最大价值,递推公式为。416. 分割等和子集。
2024-03-29 15:55:39 300
原创 day 40 动态规划 03
思路:dp[i]是i个元素二叉搜索树的种类,dp[i] += dp[以j为头结点左子树节点数量] * dp[以j为头结点右子树节点数量]思路:dp[i]是i的最大乘积,递推关系是i= j + (i-j)dp[i] = j X dp[i-j]与j x (i-j)的最大值。96.不同的二叉搜索树。
2024-03-28 17:11:48 212
原创 day 39 动态规划02
思路:dp[i][j]表示到(i,j)有dp[i][j]个路径。dp[i][j] = dp[i-1][j] + dp[i][j-1]思路:递归思路和上面一样,只是如果是1则只能取一边。63. 不同路径 II。
2024-03-26 20:56:04 258
原创 day 38 动态规划01
动态规划中每一个状态一定是由上一个状态推导出来的,思路:i层台阶方法= i-1层方法加上i-2层方法。,贪心没有状态推导,而是从局部直接选最优的,746. 使用最小花费爬楼梯。509. 斐波那契数。
2024-03-26 20:13:14 258
原创 day 37 贪心06
从后往前遍历,如果当前值大于后面值,当前值-1且后面值都变9。思路:使用后序遍历,先在叶子节点的父节点装,968.监控二叉树 (可以跳过)738.单调递增的数字。
2024-03-26 16:42:22 121
原创 day 36 贪心05
思路:统计每个字符最后出现的位置,从头遍历字符,更新字符最远下标,直到字符最远下标和当前位置相等,则是分割点。思路:和上面题目一样,确定的是重合区间。返回值上变得复杂一点。思路:和气球题一样,只是结果是总长度减去射箭数。435. 无重叠区间。763.划分字母区间。
2024-03-26 15:51:26 141
原创 day 34 贪心04
思路:先按最左边界排序,比较下一个左值和最小右边界的大小,小则更新最小由边界,大则最小有边界变成下一个值的最小右边界。452. 用最少数量的箭引爆气球。406.根据身高重建队列。思路:难点在于二维数组的排序。
2024-03-26 14:24:22 149
原创 day 33 贪心03
思路:三个for循环,一个从左往右去,一个再从右往左来,最后一个统计总数。1005.K次取反后最大化的数组和。思路:累加直到能填补复数的下标。思路:重要的是进行绝对值排序。
2024-03-25 17:28:55 193
原创 Day 32 贪心02
思路:需要一个临时的长度来记录在当前可到达的范围了,下一个最长长度是多少,防止重复走。思路:记录最大的覆盖范围,知道覆盖范围超出长度。思路:将后一天的和现在相减并累加非0值,122.买卖股票的最佳时机II。
2024-03-25 16:26:48 208
原创 Day 27 回溯04
思路:改变的是判断条件,考点还有字符串的插入,拼接,字符比大小,递归传入的参数是i+2,这点检查了许久。思路:简单的回溯算法。
2024-03-22 23:14:45 128
原创 Day 26 回溯03
思路:第一眼比较难,其实分开看还好,还是套模板,只是判断条件变得更加复杂,然后分割方案用到的队列,不是list,所有又有点区别。用到了数组排序,复习一下快排。思路:要剔除重复解,
2024-03-22 16:10:07 229
原创 Vue简介与初识
●Vue 是一套用来动态构建用户界面的渐进式JavaScript框架○构建用户界面:把数据通过某种办法变成用户界面○渐进式:Vue可以自底向上逐层的应用,简单应用只需要一个轻量小巧的核心库,复杂应用可以引入各式各样的Vue插件● 作者:尤雨溪。
2024-03-20 15:44:17 1008
原创 Day 24 回溯算法01
使用LinkedList ,与 ArrayList 相比,LinkedList 的增加和删除的操作效率更高,而查找和修改的操作效率较低。回溯法的理解:回溯法可以抽象为一个树,树的宽度相当于集合大小,树的深度等于递归深度。回溯和递归相辅相成,有有递归就会有回溯,通常在递归函数的下面。思路:回溯三步走,套用上面的模板,要设置公共参数。在一个集合中找到指定的组合(子集)给一个字符串,如何切割满足特定条件。4.排列组合问题,组合没有顺序,排列强调顺序。5.棋盘问题,n皇后,解数独。
2024-03-20 11:05:43 262
原创 Day23 二叉树09
思路:节点值不在区间式,返回的不是子节点,而是递归调度,而且根据二叉搜索树特征,该节点小于key则所有左子树都小于key,右子树同理。108.将有序数组转换为二叉搜索树。538.把二叉搜索树转换为累加树。思路:双指针法,需要额外调度函数。669. 修剪二叉搜索树。思路:从中间节点开始。
2024-03-19 20:31:47 201
原创 Day 22 二叉树08
思路:递归法,找到值在p,q两点之间的节点,理由是p在左子树,q在右子树,此节点一定是最近的公共祖先。思路:删除节点子不为空,右孩子接位,右孩子移到右孩子的最左下角。思路:不考虑深度差的话,直接插入到叶子节点。235. 二叉搜索树的最近公共祖先。701.二叉搜索树中的插入操作。450.删除二叉搜索树中的节点。
2024-03-19 16:05:25 124
原创 Day 20二叉树07
思路:和昨天最后一题一样,使用双指针法,对于int返回不合适就再再创建一个合适的返回函数去调度。思路:回溯法,不出现目标节点就网上返回null,两个子节点都不为null则找到。236. 二叉树的最近公共祖先。530.二叉搜索树的最小绝对差。501.二叉搜索树中的众数。
2024-03-18 14:50:31 333
原创 day16 二叉树03
思路:返回条件是左右子树为null,所以先进入最左子树,然后再去最右子树,确定到最底端,再返回,注意一个子树为空,一个子树不为空不是最小的深度。思路:可以层序遍历,也可以前序和后序,递归就是统计左右孩子长度取其大值。222.完全二叉树的节点个数。104.二叉树的最大深度。111.二叉树的最小深度。
2024-02-12 21:48:10 386 1
原创 day15 二叉树02
迭代需要队列,且两个while,外层while是queue不为空,内层while是queue的大小,提前获取queue的长度,然后进入内层循环,弹出队列元素将值加入到resList,然后再将该元素的左右孩子入队。思路:递归相当于直接操作resList数组,需要传递当前层数,将resList最新的出来,加入当前root的值,再递归传入左孩子和右孩子。总结:交换左右孩子就行,但是中序遍历不行,会重复交换左孩子,所以要进入两次左孩子,而不是进入左孩子;思路:队列先进先出,双指针法,右孩子先进先出,指向右孩子。
2024-02-12 13:46:45 341 1
原创 day13 栈与队列part03
在push是,比较该元素是不是比back端的大,若大则移出back段的元素,直到back端没有比他更大的。思路:保证在队列的fornt段是最大值,每次要pop时,比较是不是fornt端的元素,若不是则不pop。总结:最后小顶堆中是K个从小到大的使用最频繁的数据,所以出队列后要从大到小进入数组。大顶堆需要保证全部有序,小顶堆只用保证前K个元素有序,用大顶堆或小顶堆来解决前k个大的或者小的元素。239. 滑动窗口最大值 (一刷。347.前 K 个高频元素。
2024-02-07 22:03:28 404 1
原创 day 11 栈与队列part02
思路:栈解决,查看栈顶元素是否与当前元素相同,相同就出栈,不相同就入栈。最后再建立一个字符串加入每个出栈的元素。总结:一开始的想法是进栈元素是左括号,但右括号确实比较方便。总结:栈中是倒叙,所以出栈的元素是加在左边。1047. 删除字符串中的所有相邻重复项。150. 逆波兰表达式求值。总结:熟练掌握一些常用的api。
2024-02-07 19:09:35 393 1
原创 day10 -栈和队列01
SGI STL 由Silicon Graphics Computer Systems公司参照HP STL实现,被Linux的C++编译器GCC所采用,SGI STL是开源软件,源码可读性甚高。HP STL 其他版本的C++ STL,一般是以HP STL为蓝本实现出来的,HP STL是C++ STL的第一个实现版本,而且开放源代码。2.一个队列,记录队长,出去的数据再进队列,知道出目标数据。栈的内部结构,栈的底层实现可以是vector,deque,list 都是可以的, 主要就是数组和链表的底层实现。
2024-02-06 15:17:34 302 1
原创 day9--字符串part02
KMP算法,next数组是前缀表,保存的是模式串需要从哪开始匹配。即下标i之前(包括i)的字符串中,有多大长度的相同前缀后缀,。过程:如果s[i]与s[j]不相等,j就等于next[j-1]的值,就是回跳。易混点:i,j,不仅仅在模式串中移动,在next数组中也起作用,两者要联系起来看。next[i] 表示相同前后缀的长度,即j;j:前缀表的长度,指向前缀表的最后一位。28. 实现 strStr()计算前缀表:next数组;最后next[i]=j。如果相等,则j+1;
2024-02-06 13:51:36 356 1
原创 day8--● 344.反转字符串● 541. 反转字符串II● 卡码网:54.替换数字● 151.翻转字符串里的单词● 卡码网:55.右旋转字符串
Spring类是不能直接使用.length的,必须是char [ ]才行。三步骤:1.去括号,2.整个反转,3.单词反转。Java里的string不能修改。151.翻转字符串里的单词。卡码网:55.右旋转字符串。541. 反转字符串II。卡码网:54.替换数字。
2024-02-04 15:56:45 380 1
原创 day 7 哈希表2 ● 454.四数相加II ● 383. 赎金信 ● 15. 三数之和 ● 18. 四数之和 ● 总结
注意上面for(char c : ransomNote.toCharArray())的用法。总结:for(int i : nums1)就是遍历数组,i是数组值;和三数之和差不多,只是再多一个for循环的事情。会使right或者left超出数组范围从而报错。HashMap:是键值对,键是唯一,值是覆盖。原因:在声明时是声明的string,思路,使用数组或者map来哈希解决;总结:去重操作需要仔细想一想。454.四数相加II。
2024-02-02 20:55:23 343
原创 day 6 242.有效的字母异位词 349. 两个数组的交集 202. 快乐数 1. 两数之和
题目不难,需要熟悉hashset和位数处理,hashset基础不熟,补充知识点。熟悉hashset的一些函数用法,242.有效的字母异位词。总结:字符串的处理还不熟悉。349. 两个数组的交集。总结:掌握一下map。
2024-02-01 16:23:53 344 1
原创 day42--4. 两两交换链表中的节点 ● 19.删除链表的倒数第N个节点 ● 面试题 02.07. 链表相交 ● 142.环形链表II
null)这句顺序不能颠倒,同时是&&不是||。2.last指针先走n+1步,cur指向被删除节点的前一个结点才好删除目标节点。1.需要一个虚表头,不然不好处理{1},删除倒数第一个元素的情况。快指针与慢指针有环一定相遇--快指针相对慢指针一次前进一个节点。相遇后快指针和头指针一起走会在环的开始节点相遇。相遇时快指针超n圈,n>=1;数学思维锻炼,真真真想不到。19.删除链表的倒数第N个节点。24. 两两交换链表中的节点。两链表后端开始对其,再一起走。总结:节点相等不是节点值相等。
2024-01-30 20:35:20 382 1
原创 day3链表--链表理论基础 ● 203.移除链表元素 ● 707.设计链表 ● 206.反转链表
null不然会报错,原因是p本身为空的情况下,不存在p.next,上面的head也是同理,这个知识点把我整了20来分钟,一开始看了半天也没看出来是为什么报错。总结:第一眼看感觉右手就行,结果写了好久,题目有点小问题,该链表默认是有头节点的,所以查找的时候注意index的位置,易错点是在于双指针法时,不能pre=head,cur=head.next,这样赋值,这会导致死循环。临界情况就是index分为三种,0,正常值,size,所以需要分析一下所处的条件。总结,递归法不是很熟练,双指针法倒是容易想出来,
2024-01-30 11:24:32 352 1
原创 Day2--977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II
终止位置先移动,起始位置后移动。判断条件是sum>=target,长度是j-i+1,注意j-i的值,最后的落脚点时j-i是比长度小2的(跳出循环时i已经导致sum<target,且长度本身就要比j-i大1)最后还要考虑不满足条件的情况,引入result变量来解决,不能直接返回j-i+2。1.以圈为对象分析,一共是有n/2圈,不能以数的增长作为分析点。自己一开始没有思路的话只能想到快排,双指针的方法打开了我的视野。2.每一条边的处理规则要统一。3.单数和双数都要考虑一下。双指针:时间复杂度O(n)
2024-01-27 18:47:32 302
原创 代码随想录算法训练营31期第一天|数组理论基础,704. 二分查找,27. 移除元素
暴力法竟然出错了,仔细研究后发现是删除元素会改变长度大小,所以length会改变,需要用一个变量来代替length使用,移除元素我能想到的只有暴力法,用两个for,但时间复杂度无疑是O(主要注意左闭右闭和左闭右开的区别及其原理,我觉得这是容易错点的点。双指针法(只需要一个for循环就能解决)双指针法很精辟,让我眼前一亮。
2024-01-24 21:28:05 492
原创 C++ Prime Pluse 第10章复习题
1.什么是类类是一种将抽象转换为用户定义类型的C++工具,它将数据表示和操纵数据的方法组合成一个整洁的包。类声明:以数据成员的方式描述数据部分,以成员函数(被称为方法)的方式描述公有接口。类方法定义:描述如何实现类成员函数2.类如何实现抽象、封装和数据隐藏抽象:类表示人们可以类方法的公有接口对类对象执行的操作封装:将实现细节放在一起并将实现细节与抽象分开数据隐藏:类的数据成员放在私有部分,只能通过成员函数来访问数据3.对象和类之间的关系是什么类:定义了一种类型,包括使用方法。对象
2021-10-20 20:36:12 179
空空如也
关系运算对于关系性质的保持性证明
2021-07-01
TA创建的收藏夹 TA关注的收藏夹
TA关注的人