- 博客(31)
- 收藏
- 关注
原创 计算机低能儿从0刷leetcode | 38.外观数列
重在读懂题目,其实仅仅是一个简单的递归,只需要把n-1的字符串转换一下就可以得到n的字符串,具体如下:
2024-11-12 15:12:12
801
1
原创 计算机低能儿从0刷leetcode | 36.有效的数独
1、我们分别建立三张9*9的表row、col、block。row[i][num]代表数独表的第i行中,数字num+1出现的次数(因为num的范围是0-8,而代表的数字是1-9);col[j][num]代表数独表第j列中,数字num+1出现的次数;block[k][num]代表数独表第k个块中,数字num+1出现的次数。
2024-11-12 14:04:59
243
原创 计算机低能儿从0刷leetcode | 34.在排序数组中查找元素的第一个和最后一个位置 | 二分法
1、寻找左端点。我们还是使用二分查找,依然是比mid小去左侧,比mid大去右侧。区别是当target == nums[mid]的时候,如果mid-1存在,我们判断nums[mid-1]是否也等于target,如果是就向左查找,因为左端点一定在左侧,否则向右查找。2、从确定好的左端点位置向右遍历数组,直到找到右端点。
2024-11-01 10:31:16
327
原创 计算机低能儿从0刷leetcode | 31.下一个排列
主要过程分为三部分:1、从末尾寻找第一个nums[i] > nums[i-1]的位置,找不到就把整个数组升序排列并return.2、从末尾寻找第一个大于nums[i-1]的值,和nums[i-1]交换。3、将[i,len-1]位置升序排列。
2024-10-29 16:01:22
397
原创 计算机低能儿从0刷leetcode | 29.两数相除 | 倍增法
本题使用倍增法,这是之前从来没有接触过的方法,chatgpt的介绍是"倍增法的核心思想在于指数增长,即通过成倍增长快速接近目标,能高效地减少原本需要线性处理的计算量,使得原本可能需要多个步骤的计算转化为对数级别的快速操作"
2024-10-28 20:23:28
324
原创 计算机低能儿从0刷leetcode | 22.括号生成 | 简单易懂的回溯法
首先我们明确,我们需要生成有2*n个元素的括号序列(先不考虑左右括号的配对),那么所有结果我们可以用一个树形图来表示。
2024-10-05 14:13:41
912
原创 计算机低能儿从0刷leetcode | 18.四数之和
主要思路就是在之前“三数之和”的基础上再套一个for循环,即每次先固定一个数nums[i],然后从nums[i+1](用nums[j]表示)开始与之组合,即为寻找nums[j] + nums[l] + nums[r] = target - nums[i]的三元组。对于nums[i] : while(i>0&&nums[i]==nums[i-1]&&i
2024-09-25 15:41:28
368
原创 计算机低能儿从0刷leetcode | 17.电话号码的数字组合 | 回溯思想
看题解学习到这种思想叫做回溯法,学习了一下,这是建立在DFS的基础上搜索思路,还分为递归式回溯以及非递归式回溯,这道题使用的是递归回溯。原文链接:https://blog.youkuaiyun.com/u011956367/article/details/120555480。if(限界函数&&约束条件){//满足限界函数和约束条件。//结果处理(输出结果,方案计数等)...//回溯入场准备工作。...//回溯退回清理工作。void DFS(int i){//搜索第i层。if(i>n){//搜索结束。
2024-09-24 23:53:52
479
原创 计算机低能儿从0刷leetcode | 16.最接近的三数之和
和15题是很类似的思路,都是排序+双指针的方法,并且这里不需要很严格的去重操作,其实更简单一些。
2024-09-24 23:37:29
231
原创 计算机低能儿从0刷leetcode | 15.三数之和
对于每个nums[i],当nums[i]==nums[i-1]的时候要跳过,否则会导致结果重复;每次计算sum = nums[i] + nums[l] + nums[r],如果sum>0,则r--(需要寻找更小的数)、如果sum<0,则l++(需要寻找更大的数)、如果sum=0,那么l++、r--,但是在l和r移动之前一定要注意,需要用两个while循环,跳过重复的nums[l]或者nums[r],防止结果重复。
2024-09-22 22:54:29
274
原创 计算机低能儿从0刷leetcode | 12.整数转罗马数字
误区:1、假设有字符串res,res.push_back('IV')的操作是错误的,因为push_back()每次只能向末尾添加一个字符,而‘IV’很明显是两个字符,因此这时候可以使用一下两种方法:
2024-09-20 11:30:11
229
原创 计算机低能儿从0刷leetcode | 11.盛最多水的容器
题目:11. 盛最多水的容器解答:不想暴力遍历,于是让右端点j从最右侧开始遍历,每次寻找离j最远、且高度不小于height[j]的左端点i,结果发现错误,比如[1,2]的情况。于是又打补丁,按同样思路左端点i从0开始遍历,每次寻找离i最远、且高度不小于height[i]的右端点j,结果正确,然而时间复杂度并没有比暴力遍历少。于是看了题解,使用双指针的方法,这里需要明确两个要点:1、每次选择height[i]和height[j]中最小的那个,然后计算容量=(i-j) x 这个最小的高度。这一点很好理解。
2024-09-19 20:30:13
391
原创 计算机低能儿从0刷leetcode | 8. 字符串转换整数 (atoi)
题目:8. 字符串转换整数 (atoi)大致思路描述:题目写的有些复杂,但通过阅读我们发现处理主要分为以下部分:1、首先处理空格。当字符串最开始有空格存在时,把这些空格都跳过,很明显我们需要使用一个while循环.2、其次处理符号。‘+’和没有符号为正,‘-’为负。3、处理数字部分。只需要提取数字,当遇到非数字时停止即可,这里要注意s中存放的是字符,所以需要把字符转化为数字,即减去48(因为字符‘0’的十进制是48),详见下表。4、判断是否溢出。如果溢出按照要求舍去就可以了。这里强调,在此代码逻辑中,一定不
2024-09-18 22:18:22
506
原创 计算机低能儿从0刷leetcode | 7. 整数反转
用的是转化为long int的做法,也许不太符合出题的本意,不转化的方法主要侧重于数学运算,偷个小懒不想自己推完再写一遍了。
2024-09-18 21:38:18
226
原创 计算机低能儿从0刷leetcode | 6. Z 字形变换
1、对于vector的使用还是很不熟练,如果能想到用vector来做,就会简单很多/创建二维数组,然后放进去。
2024-09-18 15:39:50
216
原创 计算机低能儿从0刷leetcode | 5. 最长回文子串(踩了好多坑)
此方法看起来简单易懂,但其实有很多重要的细节,比如让我们思考以下几个问题:1、为什么这段代码中没有向左扩散的while循环呢?2、向左向右扩散时,s[l]和s[r]一定是关于s[i]对称的吗?3、这两个循环的顺序是否有严格要求?
2024-09-13 16:33:53
391
原创 计算机低能儿从0刷leetcode | 3. 无重复字符的最长子串
自己写的时候不仅没有想到滑动窗口法、只想到了暴力遍历,甚至没有想到用哈希表来查找是否有重复元素。借此机会复习了哈希表,也就是unordered_set的用法。
2024-09-13 09:52:06
194
原创 计算机低能儿从0刷leetcode | 2.两数相加
整体思路:将两个链表对应位相加,得到结果链表的相应位。细节:1.考虑到进位,本题进位只会是1,因此设置一个变量c记录上一位的进位,同时计算下一位的进位。 2.考虑到两个链表长度不一致,只需要在循环中检测链表是否到达了末尾,如果到了末尾,那么其中一个加数为0。 3.循环结束(即两个链表都到了末尾)之后,不要忘记检查是否有进位,如果有还需要再添加一个结点。
2024-09-11 15:16:38
193
原创 计算机低能儿从0刷leetcode | 35.搜索查找位置 | 二分查找
【代码】计算机低能儿从0刷leetcode | 35.搜索查找位置 | 二分查找。
2024-09-11 14:37:17
265
原创 计算机低能儿从0刷leetcode | 28.找出字符串中第一个匹配标的下标 | KMP算法之next数组的大白话理解,我都会了你也能会
用大白话理解,要找next[j],就是找到p[j]之前这段子串(注意,不包括p[j]自己)的最长相同前后缀,然后找到这个前缀的后一个位置,即为next[j]
2024-09-10 17:18:13
2247
原创 计算机低能儿从0刷leetcode | 27. 移除元素
比较愚蠢的双指针一头一尾遍历,过程中遇到了几次对于n的计数错误问题,最后索性再额外遍历了一遍。以下为宫水三叶遍历一次的题解,非常简洁。
2024-09-09 11:12:31
144
原创 计算机低能儿从0刷leetcode | 26. 删除有序数组中的重复项
该方法主要通过交换数字位置来完成目标,但是当nums中有负数存在时(如{-1,0,0,0,2,3}),就无法运行,因为flag数组的下标不能是负数。寻找未重复的数字向数组前部添加即可,因为重复的数字不可能再被添加,所以不必保留,可以直接被未重复的数字覆盖。
2024-09-07 15:56:24
234
原创 计算机低能儿从0刷leetcode | 14.最长公共前缀
误区:最开始想使用k计数,来向res中添加元素,但是res初始化为空,不可以这样添加,而应该使用push_back()的方法(这一点借助了chatgpt哈哈哈)。将输入想象为一个二维数组,遍历不同行的同一列进行比较,都相同则加入res中。
2024-09-05 15:19:03
172
原创 计算机低能儿从0刷leetcode | 9.回文数
是以前上课的基础题(要是世界上所有东西都是自己知道解法的题就好了)注意res如果是int会溢出。
2024-09-04 19:39:37
270
原创 计算机低能儿从0刷leetcode | 1.两数之和
可以通过,但是有很多疑问,比如输入是[3,1,3],target=6时:1、此方法让数字作为key、下标作为value,但是key按理来说不应该是独一无二的吗?2、在插入的时候为什么可以允许3--0、3--2这样的键值对存在?那么my_map[target-nums[i]应该等于多少呢,是0还是2?不应该是独一无二的吗?
2024-09-04 17:22:05
157
空空如也
如何理解c语言hash函数有关代码
2022-12-16
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅