自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Python笔记

可以用来统计一个 python 列表、字符串、元组等。方法来查找出现频率最高的 k 个数字及其出现次数。中每个元素出现的次数,并返回一个。统计完词频后可以使用。

2024-06-09 15:53:54 301

原创 Day12 单调栈 下一个最大元素

2*n单纯是为了满足如果第一次从=从头到尾没有找到元素的下一个更大值,就要从头再找一遍因此是两倍数组长度,入栈的时候要满足i

2024-06-24 10:38:09 433

原创 单调栈 滑动窗口

遍历数组,当栈不为空,并且遍历到的值比栈的末尾值大的时候,while去除栈的末尾,最后加入到栈中,注意这里是将下标加入栈中而不是数据。队列存放的下标对应nums里的元素严格意义上是单调递减的,队首是最大值=q【0】,每次遍历都和队尾nums【q【-1】】比较。当此时for循环的下标比数组最大值下标大于等于3,即使队首是最大值,也要出栈,因为滑动窗口的大小为3。的滑动窗口从数组的最左侧移动到数组的最右侧。我们首先定义一个双向队列,通过单调关系变成一个单调栈。1.入(元素进入队尾,同时维护队列单调性)

2024-06-21 11:32:52 376

原创 Day11 气温变化(遍历)

组委会希望找到一段天数尽可能多,且两地气温变化趋势相同的时间举办嘉年华活动。请分析并返回两地气温变化趋势。力扣城计划在两地设立「力扣嘉年华」的分会场,气象小组正在分析两地区的气温变化趋势,对于第。天两地气温变化趋势相同,且持续时间最长,因此返回。思路:题目关键在于如何连续记录相同的变化趋势。可以从A,B列表中每次都选出两个数进行组合。天之间,两地气温变化趋势相同。把变化趋势通过数学表达式改成。解释:如下表所示, 第。

2024-06-21 10:39:55 386

原创 初见DP

插入一个字母,插入的肯定是和t[j]是一样的,所以是dfs[i+1,j],因为此时s[i]=t[j] ,所以同时减去1,得到最终答案dfs(i.j-1)=t[j]的时候,前面两个会自动递归到 dfs(i-1,j-1)+1,因此舍弃。当s[i]=t[j]的时候,dfs(i-1,j-1)+1是要大于前面两个的,舍弃前两个。替换:把s【i】替换成t【j】,在同时减去1,也就是dfs(i-1,j-1)+1。dfs(i,j)表示s的前i个字母和t的前j个字母的LCS长度。rose -> ros (删除 'e')

2024-06-19 17:06:05 486

原创 初见背包问题-递归方式

分析:+1表示选了这个硬币,所以硬币个数加一,我们要求最少的,所以是min,如果dfs(i-1,c),dfs(i,c-coins[i])+1都不满足,返回值都是inf,因此输出前要判断ans的值是不是inf,是的话表示两种都不满足,返回-1。这叫加法原理,如果事件 A 和事件 B 是互斥的(即不能同时发生,不选 nums[i][的同时,又选了 nums【i】,那么发生事件 A 或事件 B 的总数等于事件 A 的数量加上事件 B 的数量。,然后串联起所有整数,可以构造一个。你可以认为每种硬币的数量是无限的。

2024-06-19 15:58:08 539

原创 Day 10 价格减免(按空格分割+替换)

是由若干个单词组成的字符串,单词之间用单个空格分隔,其中每个单词可以包含数字、小写字母、和美元符号。- "$1" 减免 50% 为 "$0.50" ,所以 "$1" 替换为 "$0.50"。- "$2" 减免 50% 为 "$1" ,所以 "$1" 替换为 "$1.00"。如果单词的形式为美元符号后跟着一个非负实数,那么这个单词就表示一个。表示价格的单词分别是 "$3"、"$5"、"$6" 和 "$9"。表示价格的单词是 "$1" 和 "$2"。每个单词都替换为 "$0.00"。

2024-06-18 15:15:20 686

原创 Day9 最长特殊序列

思路:将问题转化成子问题求解,首先我需要有一个判断A字符串是不是B字符串子序列的函数,然后遍历整个str,对当前字符串和除了自身的字符串进行判断是不是子序列,如果不是,计算长度,替换最大值。如果最长特殊序列不存在,返回。这里使用了all函数和链式执行的思想。定义如下:该序列为某字符串。

2024-06-17 10:59:35 416

原创 回溯算法

原问题:构造长为n的字符串->枚举一个字母->子问题:构造长为n-1的字符串 (递归)给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。的字符串,返回所有它能表示的字母组合。回溯有一个增量构造答案的过程通常用递归实现。dfs(i)表示大于等于i的还要枚举。

2024-06-15 20:48:01 609

原创 二叉树层次遍历

思路:首先设立cur数组,cur数组是表示当前遍历的那一层的节点,nxt表示cur数组节点的左右子树节点,也就是下一层,cur遍历完之后,用获得的nxt替换,设立vals数组用来存遍历cur的值,并且作为结果保存在ans中。根据队列的先进先出原则,队列一开始存根节点,找到他的左右子树节点后,将它踢出去,再把找到的左右子树根节点存进队列,循环往复操作,还需要直到队列长度,这样才能准确的把每一层节点都踢出去。我们只需要一直从右往左遍历,最后的节点就是想要的节点。(即逐层地,从左到右访问所有节点)。

2024-06-15 19:30:20 235

原创 Day8:排序+滑动窗口 (将题目要求转化成数学模型)2779. 数组的最大美丽值

排序后,选出的区间是连续的,我们只需考虑最左边的区间 [x−k,x+k] 和最右边的区间 [y−k,y+k],如果这两个区间的交集不为空,那么选出的这些区间的交集不为空。- 选择下标 1 ,将其替换为 4(从范围 [4,8] 中选出),此时 nums = [4,4,1,2]。- 选择下标 3 ,将其替换为 4(从范围 [0,4] 中选出),此时 nums = [4,4,1,4]。3.画一条竖直的线往下切,被切到的个数是多少,说明当k为这个数是,满足条件的数就有几个。

2024-06-15 15:45:21 589

原创 Day7:二叉搜索树

中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(例如,给定如下二叉搜索树: root = [6,2,8,0,4,7,9,null,null,3,5]给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。

2024-06-14 20:18:35 259

原创 Day6 删除链表重复节点(含前后指针)

这里我们需要加一个侦察节点,因为头节点重复的话也要删掉,判断思路是:如果这个节点和后续节点的值相同,那么进入循环,判断当前节点是否存在,以及当前节点的值是不是value,如果是value,删除这个节点,如果这个节点和后续节点值不相同,指针后移。设立cur表示当前节点,cur的next不为空时,比较cur和他next的val,相同的话,删除next指针,不相同的话,把cur往后移。当后指针到达尾部时,前指针离他有n个节点,这样前指针指向的就是倒数n+1的节点,前指针的next就是我们要删除的节点。

2024-06-12 16:02:46 874

原创 Day6 快慢指针

所以当快慢指针相遇后,慢指针和头指针再一起移动C距离后,头指针到达离入口a-c的位置,慢指针再入口处,a-c=(k-1)(b+c),所以再继续移动,直到头指针和慢指针相遇,他俩一定在入口处相遇。首先,快慢指针一定会在环内相遇,因为特殊情况,当慢指针刚好到入口,快指针在他前面,那么他俩也能在环内相遇,假设a b c。慢指针移动距离:a+b。思路:只存在两种情况,当链表长度为奇数,快指针到末尾,慢指针指向的就是中中间节点。指针再次到达,则链表中存在环。当链表长度为偶数,快指针指向空,慢指针指向的就是中间节点。

2024-06-12 10:10:16 1063

原创 Day5 反转链表

p0指向的是下一个即将反转的链表的前一个节点,如图在1 2 刚完成反转,p0的next还没有变成pre时,它指向的1刚好就是3 前面的节点,也就是即将反转的链表的前一个节点,所以我们只需要提前保留这个值,将他赋给p0的next就可以继续反转下一个组合了。思路:反转结束后,从原来的链表看,pre指向反转这一段的末尾 cur只想反转这一段后续的下一个节点。设立一个p0指向left节点的前一个节点,将他指向pre,并且将left指向cur。你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。

2024-06-11 17:29:49 751

原创 C++做题总结

auto可以在声明变量的时候根据变量初始值的类型自动为此变量选择匹配的类型答案:int。

2024-06-10 18:58:36 135

原创 二分查找在无序数组中的应用

如果这个数大于后面的,r指针指向这个数,因为它可能是最大值。如果小于后面的数,那么l指针指向这个数后面一个。二分取中间点,这点要是比后面的值大,那么前半部分一定有一个峰值,反之后半部分一定有一个峰值。,找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返回。或者返回索引 5, 其峰值元素为 6。3 是峰值元素,你的函数应该返回其索引 2。你的函数可以返回索引 1,其峰值元素为 2;峰值元素是指其值严格大于左右相邻值的元素。当L和R重合时,这个数就是我们要的数。的算法来解决此问题。

2024-06-10 12:16:57 143

原创 Day 4 881. 救生艇(双指针)

每艘船最多可同时载两人,但条件是这些人的重量之和最多为。4 艘船分别载 (3), (3), (4), (5)3 艘船分别载 (1, 2), (2) 和 (3),每艘船可以承载的最大重量为。承载所有人所需的最小船数。1 艘船载 (1, 2)

2024-06-10 10:29:21 412

原创 Day 3 双指针- 双数和,三数和,接雨水

优化:在方法一中可以发现,我们每次都是针对左右两个高度的较小值,所以我们可以不额外添加两个数组,而是通过两个指针放在首尾部,实时更新这两个指针的大小,代表目前的最大高度,然后将这两个指针的大小进行比较,找到更小的那个。思路:每个位置能接多少水,要求左边木板的高度和右边木板的高度,取最小值,而左边木板的最小值取决于左边各个数组的最大高度,因为高出这个高度的水回流出去,低于的则不会,同理右边木板的高度就是他右边所有数组的最大值。功能:多个列表同时遍历,如果打印出来,会把每次的值放进一个元组输出出来。

2024-06-09 19:32:16 577

原创 递归-二叉树

这里的cnt可以理解为这个节点前有多少个节点,第一轮cin=1,因为有根节点3,然后将1作为cnt带入到左右子树根节点中,也就是这时候的左右子树根节点前已经存在一个节点。方法二:设置一个全局变量x,在递归过程中不仅把节点传下去,也把这个路径所包含的节点个数也传下去,然后更新x的值,最终全局变量的值就是最大深度。整棵树的最大深度=max(左子树的最大深度,右子树的最大深度)+1。递:从原问题出发,把问题分解成更小的子问题。递归:子问题和原问题相似,适用于递归实现。尽头就是边界条件,返回的过程就是归。

2024-06-09 19:07:53 150

原创 记忆化搜索 dfs

解释一下res=max(res,dfs(xxx)+1),为什么要把res和后面的对比来选择最大的,我们知道三个if是顺序执行的,在第二个if执行的时候,res的值已经是第一轮if执行完更新后的res了,所以第二个if中的res其实是第一个if执行完成后的if,相对的,第三个if中的res其实是第二个if执行完的if,那么为什么第一个if也要加res=max(res,dfs(xxx)+1)呢?,因为第一个if也要进入dfs的三个if,同样要通过比较三个if的res来筛选出最大的res。

2024-06-09 19:06:27 539

原创 易错问题1--内存溢出

易错点:在while条件里判断溢出问题,不能把a+3<nums.size()放在判断是否相等后面。

2024-06-09 18:58:51 132

原创 二分查找--在排序数组中查找元素的第一个和最后一个位置

左闭右开left=mid+1 right=mid 这时候right初始值是len(nums),区间不为空:left=8的位置,暴力做法就是遍历每个数,询问是否>=8。左开右闭left=mid right=mid+1 left初始化成-1。=x)-1。双闭区间left=mid+1 right=mid-1,=x左边的那个数 (>x)-1。>=x 就是>=x的情况。

2024-06-09 16:43:33 187

原创 Day2 双指针问题集合

值得注意的是:严格小于k,所以首先要判断k大小,小于等于1则题目不成立,这里与题1不同的是对ans的处理方式,对于题1,ans是用来轮流比较取得最小值,这里ans用于累加。上述思想其实可以理解为对每个right,求他前面的数据和他构成的数组满足大于等于target长度,并且长度最小的。这里注意cnt用Counter 哈希表 可以表示每个数出现的次数,通过判断次数来得到每个right下最长字符。请注意,你的答案必须是。因为无重复字符的最长子串是。因为无重复字符的最长子串是。因为无重复字符的最长子串是。

2024-06-09 15:46:54 302

原创 Day1--区分黑白球(方法二 贪心)

思路:第一种方法:要求将黑白求分边。其实只要将所有白球或者所有黑球移动到一边便可以完成上述要求,遍历数组,当遍历到白球时,步数加上这个白球前面的黑球个数=将这个白球移动到前面所有黑球的前面,遍历到黑球,黑球计数值加1,这样从头到尾遍历一遍即可。思路:最小步数=把所有白球都移到第一位-(当白球已经排成一队时,每个位置的白球移动到第一个位置所需要的步数)值得注意的是:p*(p-1)是等差数列和。方法二:贪心算法(巧妙)

2024-06-08 23:40:22 169

空空如也

空空如也

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

TA关注的人

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