- 博客(17)
- 收藏
- 关注
原创 代码随想录动态规划05
有N件物品和一个最多能背重量为W的背包。第i件物品的重量是weight[i],得到的价值是value[i]。,求解将哪些物品装入背包里物品价值总和最大。。所以01背包和完全背包唯一不同体现在遍历顺序上。01背包的核心代码。从大到小遍历。
2023-08-17 18:22:02 81 1
原创 代码随想录动态规划04
推导公式为 dp[i][j] = Math.max(dp[i][j],dp[i - zeroNum][j - oneNum]+1)。纯01背包 是求 给定背包容量装满背包的最大价值是多少。递推公式为 dp[j] = Math.max(dp[j], dp[j - weight[i]] +value[i]);是求给定背包容量,装满背包有多少种方法。递推公式为 dp[j] += dp[j - nums[i]] (后边的状态都是由前边的状态推导出来的)。是求给定背包容量,能不能装满这个背包。
2023-08-17 17:51:56 91 1
原创 代码随想录哈希表专题
今天开始了哈希表专题。官方说法中 哈希表是根据关键码的值而直接进行访问的数据结构。简单来讲数组就是一个哈希表,哈希表中关键码就是数组的索引下标,然后通过下标直接访问数组中的元素。一般哈希表都是用来快速判断一个元素是否出现集合里。当选择哈希法解决问题时,可以选择数组,set,map三种数据结构。哈希表都是用来快速判断一个元素是否出现集合里。哈希法牺牲了空间换取了时间。利用数组,set和map的特点,灵活选择作为哈希表。
2023-08-01 15:42:41 49 1
原创 代码随想录回溯算法专题04
这两道题,较之前的题递归的深度都有了进一步的加深(因为都是二维数组)。所以在刚开始思考时可能有点无法下手,但当认识到其本质还是一个回溯问题时,套进模版思考一下就会发现按照步骤也可以做出来,只不过合法性校验和单层循环逻辑麻烦了一点。 解数独因为其没有返回值,直接操作棋盘。所以在返回值方面有所改动。 对于using数组。using数组即可以标记元素的选取状态,又可以去重。正是因为其标记标记了元素的选取状态,才可以去重。
2023-07-30 10:46:22 71 1
原创 代码随想录回溯算法专题03
子集问题需要注意收集树中叶子节点和内部节点的集合。对于去重,如果给的数组不能排序(递增子序列)或需要using数组需要标记别的信息(全排列问题),可以使用set集合来去重。set集合是记录本层元素是否重复使用,新的一层set都会重新定义(清空),所以要知道set只负责本层!1.使用used数组进行标记元素的选取状态2.单层for循环 i 从 0 开始。
2023-07-27 15:24:51 98 1
原创 代码随想录回溯算法专题02
本次通过了5道题,分别是组合总和,组合总和II,分割回文串,复原IP地址和子集。组合总和的特点是数组无重复元素,每一个元素都可以被重复取。组合总和II的特点是数组有重复元素,但元素只能取一次。条件都是满足和为target。前者关键是startIndex在传参时要将 i 传过去以实现重复取,后者关键是使用using数组标记相同元素是位于同一树枝上还是同一树层上。分割回文串和复原IP地址都是分割问题,但也属于组合问题,都需要startIndex来保证解集中不出现重复元素。
2023-07-26 17:38:05 77 1
原创 代码随想录回溯专题01
本次博客记录了回溯算法的思想和模版,并练习了组合问题的经典题目,并学会了如何剪枝这一组合问题,还有组合问题的变式,即添加题目条件和修改每次遍历的集合。
2023-07-25 09:58:34 73
原创 动态规划(一)
也就是: F(0) = 0,F(1) = 1 F(n) = F(n - 1) + F(n - 2),其中 n > 1 给你n ,请计算 F(n)。个台阶向上爬需要支付的费用。- 支付 1 ,向上爬两个台阶,到达下标为 2 的台阶。- 支付 1 ,向上爬两个台阶,到达下标为 4 的台阶。- 支付 1 ,向上爬两个台阶,到达下标为 6 的台阶。- 支付 1 ,向上爬一个台阶,到达下标为 7 的台阶。- 支付 1 ,向上爬两个台阶,到达下标为 9 的台阶。- 支付 1 ,向上爬一个台阶,到达楼梯顶部。
2023-03-25 00:09:27 370
原创 二叉树的遍历
二叉树的遍历分为深度优先搜索和广度优先搜索。深度优先搜索有前序遍历(中左右),中序遍历(左中右)和后序遍历(左右中),每种方法又有递归写法和迭代写法。广度优先遍历即层序遍历(迭代法)。对于二叉树,掌握其遍历方法非常重要,在做题过程中找到合适的遍历方法对解出这个题是非常重要的。
2022-11-21 21:26:21 375 1
原创 栈与队列相关题目
1.对于栈和队列来说,要了解清楚其底层代码是如何书写的,这样用的时候才能得心应手。2.栈是容器适配器,底层容器使用不同的容器,导致栈内数据在内存中是不是连续分布。3.要理解单调队列和优先级队列。
2022-10-30 20:12:29 117
原创 【数组】移除元素
数组移除是元素之间的覆盖设置两个指针 fastIndex = 0,slowIndex = 0fastIndex 用来寻找新数组的元素,即不含val的数组slowIndex 用来标记新数组的下标
2022-09-18 21:06:31 765
原创 集合的交集、并集、差集和输入数据时查重(链表)
1.求并集,为保留原数据,创建新的链表复制集合A,拿集合B的一个元素依次与新链表的全部元素比较,若没有相同的数据则在新链表之后添加该数据,直至集合B的最后一个元素比较完毕。2.求交集,创建新链表,拿集合B的一个元素依次与集合A的元素比较,若有相同的元素,则把这个元素复制到新链表末尾。3.求差,创建新链表,A-B时,拿集合A的一个元素依次与集合B的元素比较,若无相同的元素,把其复制到新链表末尾。B-A同理。
2022-09-07 20:39:42 862 4
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人