自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【代码随想录】d44-动态规划-part04-python

有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是weight[i],得到的价值是value[i]。每件物品只能用一次,求解将哪些物品装入背包里物品价值总和最大暴力法:每一件物品其实只有两个状态,取或者不取,所以可以使用回溯法搜索出所有的情况,那么时间复杂度就是o2n,这里的n表示物品数量。所以暴力的解法是指数级别的时间复杂度。进而才需要动态规划的解法来进行优化!用以下例子进行分析。

2023-10-17 11:59:57 65

原创 【代码随想录】d43-动态规划-part03-python

给定一个正整数 n ,将其拆分为 k 个 正整数 的和( k >= 2 ),并使这些整数的乘积最大化。返回 你可以获得的最大乘积。题目链接/文章讲解:https://programmercarl.com/0343.%E6%95%B4%E6%95%B0%E6%8B%86%E5%88%86.html视频讲解:https://www.bilibili.com/video/BV1Mg411q7YJ。

2023-10-13 12:49:01 77

原创 【代码随想录】d42-动态规划-part02-python

一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。问总共有多少条不同的路径?题目链接/文章讲解:https://programmercarl.com/0062.%E4%B8%8D%E5%90%8C%E8%B7%AF%E5%BE%84.html视频讲解:https://www.bilibili.com/video/BV1ve4y1x7Eu。

2023-10-12 12:28:34 353 1

原创 【代码随想录】d41-动态规划-part01-python

动态规划,英文:Dynamic Programming,简称DP,如果某一问题有很多重叠子问题,使用动态规划是最有效的。所以动态规划中每一个状态一定是由上一个状态推导出来的,这一点就区分于贪心,贪心没有状态推导,而是从局部直接选最优的,动态规划(Dynamic programming,简称DP)是一种将复杂问题分解成很多子问题,并将子问题的求解结果存储起来避免重复求解的一种算法。动态规划一般用来解决最优问题。而解决问题的过程,需要经历多个决策阶段。每个决策阶段都对应着一组状态。

2023-10-11 22:52:37 80 1

原创 【代码随想录】d32-贪心算法-part02-python

给你一个整数数组 prices ,其中 prices[i] 表示某支股票第 i 天的价格。在每一天,你可以决定是否购买和/或出售股票。你在任何时候 最多 只能持有 一股 股票。你也可以先购买,然后在 同一天 出售。返回 你能获得的 最大 利润。

2023-09-25 17:22:12 78 1

原创 【代码随想录】d31-贪心算法-part01-python

贪心的本质是选择每一阶段的局部最优,从而达到全局最优。

2023-09-24 20:20:02 116 1

原创 【代码随想录】d30-回溯算法-part06-总结-python

回溯是递归的副产品,只要有递归就会有回溯,所以回溯法也经常和二叉树遍历,深度优先搜索混在一起,因为这两种方式都是用了递归。回溯法就是暴力搜索,并不是什么高效的算法,最多再剪枝一下。

2023-09-22 14:35:43 180 1

原创 【代码随想录】d29-回溯算法-part05-python

给你一个整数数组 nums ,找出并返回所有该数组中不同的递增子序列,递增子序列中 至少有两个元素。你可以按 任意顺序 返回答案。数组中可能含有重复元素,如出现两个整数相等,也可以视作递增序列的一种特殊情况。题目链接/文章讲解:https://programmercarl.com/0491.%E9%80%92%E5%A2%9E%E5%AD%90%E5%BA%8F%E5%88%97.html视频讲解:https://www.bilibili.com/video/BV1EG4y1h78v。

2023-09-21 13:10:43 35

原创 【代码随想录】d28-回溯算法-part04-python

如果把 子集问题、组合问题、分割问题都抽象为一棵树的话,那么组合问题和分割问题都是收集树的叶子节点,而子集问题是找树的所有节点!求取子集问题,不需要任何剪枝!因为子集就是要遍历整棵树是否使用used数组来去重,取决于下一次递归时,是否从0开始,如果递归的时候下一个startIndex是i+1而不是0,那么就不需要使用used数组,如下图所示,树枝方向,进入下一层startindex取值为i+1,单层for循环本来就是从startindex,所以一定不满足i>startindex的条件。

2023-09-20 19:03:41 147 1

原创 【代码随想录】d27-回溯算法-part03-python

在求和问题中,排序之后加剪枝是常见的套路什么时候需要使用startIndex,什么时候不用?如果是一个集合来求组合的话,就需要startIndex如果是多个集合取组合,各个集合之间相互不影响,那么就不用startIndex。

2023-09-18 17:30:29 32

原创 【代码随想录】d25-回溯算法-part02-python

题目链接/文章讲解:https://programmercarl.com/0216.%E7%BB%84%E5%90%88%E6%80%BB%E5%92%8CIII.html视频讲解:https://www.bilibili.com/video/BV1wg411873x。

2023-09-17 22:48:12 74 1

原创 【代码随想录】d24-回溯算法-part01-python

从图中可以看出,for循环可以理解是横向遍历,backtracking(递归)就是纵向遍历,这样就把这棵树全遍历完了,一般来说,搜索叶子节点就是找的其中一个结果了。回溯的本质是穷举(纯暴力搜索),穷举所有可能,然后选出我们想要的答案,如果想让回溯法高效一些,可以加一些剪枝的操作,但也改不了回溯法就是穷举的本质。图中每一个节点(图中为矩形),就代表本层的一个for循环,那么每一层的for循环从第二个数开始遍历的话,都没有意义,都是无效遍历。所以,可以剪枝的地方就在递归中每一层的for循环所选择的起始位置。

2023-09-15 18:21:42 55 1

原创 【代码随想录】d14-二叉树-part01-python

二叉树的定义 和链表是差不多的,相对于链表 ,二叉树的节点里多了一个指针, 有两个指针,指向左右孩子。

2023-09-14 18:38:17 58 1

原创 【代码随想录】d13-栈与队列-part03-python

heapq 是 Python 标准库中的模块,用于实现堆数据结构(heap)的操作。堆是一个完全二叉树,即除了最底层,其他层都是满的,并且最底层从左到右填充。堆中的每个节点的值都必须满足堆属性(heap property),即父节点的值小于或等于其子节点的值(对于最小堆)或大于或等于其子节点的值(对于最大堆)。

2023-09-04 23:36:40 76 1

原创 【代码随想录】d11-栈与队列-part02-python

给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。题目链接/文章讲解/视频讲解:https://programmercarl.com/0020.%E6%9C%89%E6%95%88%E7%9A%84%E6%8B%AC%E5%8F%B7.html。

2023-09-04 16:50:27 151 1

原创 【代码随想录】d10-栈与队列-part01-python

栈(Stack)是一种常见的数据结构,它遵循后进先出(Last-In, First-Out,LIFO)的原则,类似于现实生活中的一堆盘子,你只能在顶部放置或移除盘子。在计算机科学中,栈通常用于管理函数调用、表达式求值、内存管理等各种任务。让我们首先进行理论介绍,然后提供Python中栈的实际实现和使用方式的示例。

2023-09-01 17:02:00 77 1

原创 【代码随想录】d8-字符串-part01-python

当需要固定规律一段一段去处理字符串的时候,要想想在在for循环的表达式上做做文章活用range的步长对于一部分字符串翻转的问题,先整体翻转再局部翻转或先局部翻转再整体翻转,有奇效注意字符串及列表切片:a[起点:终点] 取左不取右,取前不取后字符串是有序不可变的。

2023-08-30 23:30:37 37 1

原创 【代码随想录】d7-哈希表-part02-python

python内置函数all可用于判断传入的可迭代参数 iterable 中的所有元素是否都为True,如果是则返回True,反之返回FalseCounter模块,可以直接统计字符串或列表中每个字符出现的次数。

2023-08-30 19:08:24 30 1

原创 【代码随想录】d6-哈希表-part01-python

什么时候用哈希表?当我们需要查询一个元素是否出现过,或者一个元素是否在集合里的时候,就要第一时间想到哈希法。使用什么结构的哈希表?当题目限制了数组的大小,且哈希值不分散、跨度不大时,选择用数组(数组的大小是受限制的,而且如果元素很少,而哈希值太大会造成内存空间的浪费。当数组大小没有被限制,或者哈希值很分散,跨度很大,同时只需要存放一个元素时,选择用set当需要存放两个元素,例如需要使用 key value结构来存放,key来存元素,value来存下标时,选择用map。

2023-08-28 19:42:19 81 1

原创 【代码随想录】d3-链表part01-python

1.2. 链表的类型单链表单链表中的指针域只能指向节点的下一个节点双链表每一个节点有两个指针域,一个指向下一个节点,一个指向上一个节点既可以向前查询也可以向后查询循环链表链表首尾相连1.3.链表的存储方式数组是在内存中是连续分布的,但是链表在内存中可不是连续分布的。链表是通过指针域的指针链接在内存中各个节点。所以链表中的节点在内存中不是连续分布的 ,而是散乱分布在内存中的某地址上,分配机制取决于操作系统的内存管理。1.4.链表的操作删除节点修改

2023-08-26 18:55:47 38

原创 【代码随想录】d2-数组part02-python

看完视频以后才知道双指针的写法创建数组时,如果数组后续要用到数组的索引,不能只创建一个空数据,而是要*长度 ,这样后续用新数组的索引时才不会报错。

2023-08-24 23:41:07 41

原创 【代码随想录】d1-数组part01-python

给你一个按照非递减顺序排列的整数数组nums,和一个目标值target。请你找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值target,返回[-1, -1]。你必须设计并实现时间复杂度为O(log n)的算法解决此问题。34. 在排序数组中查找元素的第一个和最后一个位置 - 力扣(LeetCode)代码随想录 (programmercarl.com)

2023-08-23 20:37:02 231

空空如也

空空如也

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

TA关注的人

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