自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 126.单词接龙II

还要定义一个 HashSet 变量 words,用来记录已经循环过的路径中的词,然后就是 BFS 的核心了,循环路径集 paths 里的内容,取出队首路径,如果该路径长度大于 level,说明字典中的有些词已经存入路径了,如果在路径中重复出现,则肯定不是最短路径,所以需要在字典中将这些词删去,然后将 words 清空,对循环对剪枝处理。然后取出当前路径的最后一个词,对每个字母进行替换并在字典中查找是否存在替换后的新词,这个过程在之前那道。个人感觉这道题是相当有难度的一道题,它比之前那道。

2023-05-23 17:05:36 39

原创 44.通配符匹配

若 p[j] 是星号,要记录星号的位置,jStar 赋为j,此时j再自增1,iStar 赋为i。若当前 p[j] 不是星号,并且不能跟 p[i] 匹配上,此时就要靠星号了,若之前星号没出现过,那么就直接跪,比如 s = "aa" 和 p = "c*",此时 s[0] 和 p[0] 无法匹配,虽然 p[1] 是星号,但还是跪。虽然成功续了命,匹配完了s中的所有字符,但是之后还要检查p串,此时没匹配完的p串里只能剩星号,不能有其他的字符,将连续的星号过滤掉,如果j不等于p的长度,则返回 false,

2023-05-23 16:58:21 48

原创 65.有效数字

## 思路讲解递归判断通过check函数传入字符串,入参变量pt,e分别代表是否可以出现‘.’和‘E’。递归出口如下:1.字符串s为空2.字符串满足以下条件s等于‘E','e','+','-','.',不存在数字或者包含“.E”“.e"3.除了以下情况,都返回false:(1)字符串该位置是数字(2)flag为1并且字符串该位置是正负号(3)pt为1并且字符串该位置是‘.’

2023-05-23 16:51:44 43

原创 126.单词接龙II

(4)字符串该位置是‘e'或者'E',并且变量e为1,同时发生递归,调用check(s.substr(i+1, len-1), 0, 0);这个意思是判断‘e'或者'E'之后的字符串,同时因为‘e'或者'E'出现过了,以及’.’不能出现在指数后面,所以设置它们为0.通过check函数传入字符串,入参变量pt,e分别代表是否可以出现‘.’和‘E’。s等于‘E','e','+','-','.',不存在数字或者包含“.E”“.e"//查找数字,如果一个字符串没数字必然返回false。(1)字符串该位置是数字。

2023-05-23 16:48:15 33

原创 32.最长有效括号

如果 s[i] == ')' ,因为 f[i - 1] 是以 s[i - 1] 结尾的最长有效括号子串的长度,所以如果 i - f[i - 1] - 1 位置上是 ( ,就能与 s[i] 凑出一对有效括号,此时 f[i] = f[i - 1] + 2。但是还有一种情况,比如 "()(())" ,在遍历到最后一个 ) 时,通过上述找到的最长有效括号子串是 "(())" ,但是前面的 "()" 部分可以跟 "(())" 结合构成更长的合法括号子串,所以还应该加上 f[i - f[i - 1] - 2]。

2023-05-23 16:42:47 18

原创 30. 串联所有单词的子串(c++)

然后扫描子串的单词,如果当前扫描的单词在之前的 HashMap 中,就把该单词存到新的 HashMap 中,并判断新的 HashMap 中该单词的 value 是不是大于之前的 HashMap 该单词的 value ,如果大了,就代表该子串不是我们要找的,接着判断下一个子串就可以了。如果是三个单词 A,B,C 也还好,只需要判断子串是否是 ABC,或者 ACB,BAC,BCA,CAB,CBA 就可以了,但如果更多单词呢?首先,最直接的思路,判断每个子串是否符合,符合就把下标保存起来,最后返回即可。

2023-05-16 11:50:37 95

原创 4. 寻找两个正序数组的中位数

给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数。// 判断nums1剩余还是nums2剩余,并将剩余部分加入到合成的数组之后。// 判断合成后的数组的长度,求出中位数。既然给出了两个正序数组,我们可以将这两个正序数组合成为一个正序的数组。这个时候我们先不要求解出本题的时间复杂度为:O(log(m+n))判断合成后的数组的长度为奇数还是偶数,进而求出中位数。中位数:最中间的那个数(该数的左右个数相同)也是归并排序的组合部分。

2023-05-16 11:36:34 19

原创 11. 盛最多水的容器

遍历方法:暴力法在图例中就有30多种,感觉会比较费时间,去评论区看很多超时的 ,最后估计要先找一个基底,从 零开找,会有很多起点,这样也不知道从哪找起,不如逆向思维,先从最大的开找 ,向内找,这样可以左右找,左右都各去一个,比较一下,取大的,之后想到两边都底边-1,那么去掉的侧边小,面积就大,关于遍历终点,就选择ij重合,左右靠拢。计算方法:最大容积,也就是所谓的短板效应,底边越长,面积越大,同时需要兼顾两边的侧边,按道理是在最边缘的两条决定,矩形的宽边是两条边缘边中最短的一条。,这种逻辑值得在以后使用。

2023-05-16 11:31:38 20

原创 12.整数转罗马数字

O(1), 因为罗马字母排列组合大概10中左右, 输入参数范围很小(1, 3999), O(N) = O(1)罗马数字的特点是结果 = 各个字母代表的数字之和。

2023-05-16 11:27:16 16

原创 15.三数之和

if (j - 1!= j && nums[k] == nums[k - 1]) // 跳过第三层循环中的重复数字。以第一层循环为例,如果不跳过重复数字,那-2会产生两个相同的答案,而我们只需要一个就行,所以我们查找第一个数字,跳过后面相同的数字即可。排序后:[-4, -2, -2, -1, -1, -1, 0, 0, 0, 1, 2]

2023-05-16 11:19:19 29

原创 8. 字符串转换整数 (atoi)

int i=0;int n=1;long ans=0;int sh =0;i++;i++;flag++;sh=1;n = -1;i++;flag++;sh=1;i++;sh=1;else break;

2023-05-16 11:07:30 20

原创 7. 整数反转

我们反转整数,会用到n =n * 10 + x%10;但是n = n * 10 + x%10;(4)如果n=INTMIN/10,并且x%10<-8,那么n = n * 10 + x%10会溢出。(2)如果 n=INTMAX/10,并且x%10>7,那么n = n * 10 +x%10会溢出。(1)如果n > INTMAX/10,那么n = n * 10 + x%10会溢出。(3)如果 n<INTMIN/10,那么n = n * 10 + x%10会溢出。

2023-05-16 10:57:33 20

原创 6. N 字形变换

if (i % t < r - 1) {//r-1=3,要余数<3,代表是在下降阶段,余数>=3是在右上角阶段。//跟我那个差不多,我那个要命名2个变量,更加耗费空间,这个余数的更简便。++i) {//i遍历数组。for (auto& row : mat) {//遍历,如果空的就加空,这个挺有意思。

2023-05-16 10:47:14 99

原创 5. 最长回文子串

若比之前长,则记录新的回文串的长度以及该回文串的开始和结尾时的下标(此时,需要将 left 指针右移一位以及 right 指针左移一位。因为,当进入该判断时,此时的两个指针所指向的元素并不满足回文串的条件,所以应将两指针均回移一位)。3.最后看当前 left 指针和 right 指针指向的元素是否相同,若相同则 left 指针左移以及 right 指针右移,并且回文串长度加 2。2.再看当前元素是否与其相邻的左侧元素相同,若相同则 left 指针向左移动一位,回文串长度加 1。

2023-05-16 10:41:15 48

原创 3. 无重复字符的最长子串

/index回退到重复元素的后一个位置(不可以用indexOf)if (maxSize < set.size()) { //找出每次遍历中set最大的元素,即最大不重复子串。因为只需要判断连续的子字符串有没有重复的元素,很容易想到用Set集合里面的HashSet对象,利用一个index索引来遍历字符串。//元素与set集合里面的不重复,添加到set里。//每次有重复元素,重置set集合。//String s的索引。

2023-05-16 10:35:53 24

原创 2.两数相加

具体而言,如果当前两个链表处相应位置的数字为 n1,n2,进位值为carry,则它们的和为n1+n2+carry;其中,答案链表处相应位置的数字为 (n1+n2+carry) mod 10,而新的进位值为(n1+n2+carry)/10。此外,如果链表遍历结束后,有arry>0,还需要在答案链表的后面附加一个节点,节点的值为carry。// 如果头结点为空,则初始化头尾节点都为当前相加值mod10,即获取相加后的尾数。由于输入的两个链表都是逆序存储数字的位数的,因此两个链表中同一位置的数字可以直接相加。

2023-05-10 15:50:00 18

原创 1015.可被k整除的最小整数

假设不是的话,那么1到K个1组成的数除以K的余数必然有重复的(因为1到K个1组成的数的余数个数是K,而1到K-1才K-1个数,就多出来一个数,抽屉原理),假设两个重复余数的数是i个1组成的数和j个1组成的数,其中i>j。但是它们的差是以0结尾的,可以被2整除,就必然不能被K整除,所以假设不成立。给定正整数 k ,你需要找出可以被 k 整除的、仅包含数字 1 的最 小 正整数 n 的长度。111(K个1)中必然有个(K-i)个1组成的数能被K整除(除2和5的倍数)。如果不存在这样的 n ,就返回-1。

2023-05-10 15:43:32 33

原创 94.二叉树的中序遍历

广度优先遍历也称为层序遍历,遍历原则为:以树的根节点开始,按照树的高度由低到高,一层一层地遍历下去,每一层按照从左至右的顺序遍历,直至到达树的最大深度,遍历完全部节点为止。深度优先遍历,遍历原则为:从树的根节点开始,沿着左子树进行深度遍历,直到到达叶子节点为止;然后回溯到根节点,进行右子树的深度遍历,直到遍历完所有节点。具体的,按照根节点相对于子节点的访问顺序,可进一步分为前序遍历、中序遍历和后序遍历。因此,二叉树的搜索也称二叉树的遍历,同样有深度优先遍历和广度优先遍历两种方式。给定一个二叉树的根节点。

2023-05-10 15:39:41 23

原创 83.删除排序链表中的重复元素

同时更新头结点,显然head位于了索引为1的位置,而该位置的元素会继续和它的下一个元素比较,由于元素2和1不同,继续更新头结点,相信看到这,朋友们已经发现,这样会漏掉索引为0和索引为1位置元素的比较,这样即使有重复的元素,也无法识别出来。if(head->val == head->next->val){ //这里就是比较两个元素的值了,head->val 和 head->next->val 是C++ 中链表元素值的表示方法。//如果两元素相同,头结点不变,将指针指向下一元素的下一个,继续比较。

2023-05-10 15:34:06 16

原创 70.爬楼梯

如果用 f[i] 表示达到第 i 层楼梯的所有方法,那么它进一步等于到达第 i-1 层楼梯的方法加上到达第 i-2 层楼梯的方法的和,即。你有多少种不同的方法可以爬到楼顶呢?

2023-05-10 15:27:14 23

原创 69.x的平方根

/carry进行辗转相除,不断取中间值,直到carry == 0就结束了。//第一种情况:如果a,b各个位置两数相加不为0或者i,j没有遍历到起始位置。首先本题给了两个数,把这两个数先保持长度一致,不全的地方用0补齐,再从后往前进行遍历计算。//i和j需要>=0说明从后往前遍历还没到起始位置,遍历继续。//carry == 1说明还可以进位和累加,等于0则结束。//辗转相除法二进制取余数,反向输出即为结果。2、计算的时候,直接在后面拼接字符,最后进行反转。//如果a还存在元素。//如果b还存在元素。

2023-05-10 15:00:27 20

原创 66.加一

只需要完成+1 功能,首先分析一下,对于个位数不是9的数字,加一操作前面不用改,直接个位数+1即可。而后就是要进位的情况了,有个特殊情况:全是9,需要建新数组并返回,而且新数组长度是当前数组长度+1,第一个数字为1,其他为0;这种,从后往前遍历,遇到第一个不是9的数字时把它+1就可以了。给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。//不需要进位,只改变最后一位。

2023-05-10 14:55:41 17

原创 58.最后一个单词的长度

题目:给你一个s,由若干单词组成,单词之间用空格隔开。返回字符串中最后一个单词的长度。如果不存在最后一个单词,请返回 0。单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。

2023-05-10 14:51:13 16

原创 算法35搜索插入位置

if (target > nums[mid]) { //严格小于 target 的元素一定不是解。} else { //严格大于等于 target 的元素有可能是解。//下一轮搜索区间是 [mid + 1, right]/*如果目标值大于 nums 里的最大值,则将其插入到数组的末尾*///下一轮搜索区间是 [left, mid]/*将在区间 [0, n - 1] 内查找目标索引*/

2023-04-21 14:34:02 31 1

原创 算法27移除元素

按顺序逐个扫描数组,找出第 i 个与 val 相等的元素,将它移到数组的倒数第len - k -1位置处。先找到数组中数组共有多少个数字与val的值不相等,记为则有 len - count 个元素与val的值相等。按顺序逐个扫描数组,找出第二个与val相等的元素,将它移到数组的倒数第二个位置处。按顺序逐个扫描数组,找出第一个与val相等的元素,将它移到数组的最后一个位置处。例:nums = [3,4,5,6,4,1,2], val = 4。

2023-04-21 14:28:06 15

原创 算法26.删除有序数组中的重复项

则考虑在原来的数组中进行修改,从第一项开始比较往后的各个元素,如果发现一个不与第一项相等则立即修改第二项元素的值(数组已排好序,如果是未排序的还得考虑后面会不会有更小的值),开始比较第二项和第二项往后的,前index+1项表示已排好序而且不重复的数组,以此类推。//判断索引为index的元素是否与nums数组中index后面的元素相等,如果不相等将元素赋给下标为index的下一个元素(index—+1),index++判断下一个。//第一个元素index=0 还为初始元素。

2023-04-21 14:22:16 19

原创 算法21合并两个有序链表

/3.遍历后剩余的非空链表接在cur后面。//返回哑节点的后一个节点。新链表是通过拼接给定的两个链表的所有节点组成的。将较小的节点放在cur后面,然后再将该节点上的指针往前移动一步;定义一个哑节点dummy和一个前进节点cur;只要返回dummy.next即可。将两个升序链表合并为一个新的。将非空的链表接到cur后面。cur也往前移动一步;

2023-04-21 14:17:37 13

原创 算法20有效的括号

题目:给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。这个时候判断stack是否为0,如果为0返回false。这种情况下,遍历完s字符串,遇到第一个元素不会进栈,注意:一个特殊情况,如果遍历到的字符是右括号,但是栈这个时候为空,该怎么办?括号,那么就让与该括号相对于的右边括号入栈。括号,就判断 c 是否与刚才入栈的元素相同。遍历完 s 字符串,看stack是否为空。- 如果不相同,代表匹配不成功。- 如果相同,代表匹配成功。首先遍历这个字符串的每个元素c,

2023-04-21 14:13:45 18

原创 算法14.最长公共前缀

3.遍历后面的字符串,依次将其与 ans 进行比较,两两找出公共前缀,最终结果即为最长公共前缀;4.如果查找过程中出现了 ans 为空的情况,则公共前缀不存在直接返回。2.令最长公共前缀 ans 的值为第一个字符串,进行初始化;1.当字符串数组长度为 0 时则公共前缀为空,直接返回;// 判断共同前缀是否为空。// 判断是否有空字符串。所有输入只包含小写字母 a-z。时间复杂度:O(n^2)

2023-04-21 14:07:30 16

原创 算法13.罗马数字转整数

若存在小的数字在大的数字的左边的情况,根据规则需要减去小的数字。对于这种情况,我们也可以将每个字符视作一个单独的值,若一个数字右侧的数字比它大,则将该数字的符号取反。通常情况下,罗马数字中小的数字在大的数字的右边。若输入的字符串满足该情况,那么可以将每个字符视作一个单独的值,累加每个字符对应的数值即可。例如 XXVII 可视作 X + X + V + I + I = 10 + 10 + 5 + 1 + 1 = 27。例如 XIV 可视作 X - I + V = 10 - 1 + 5 = 14。

2023-04-21 14:00:52 31 1

原创 算法9.回文数

看到这题目我就想到昨天那一题反转题思路差不多,小于0或者10的倍数这些直接返回false,只要大于0反转之后和原数比较是否相等就可以判断了!总结:大于0就反转然后比较,小于0直接返回false,考虑特殊位数为0就行了,多测试几次就ok了。

2023-04-21 13:54:19 33 1

原创 算法1.两数之和

遍历每个元素 xx,并查找是否存在一个值与 target - xtarget−x 相等的目标元素。

2023-04-21 13:52:21 31 1

原创 算法2413.最小偶倍数

解:如果n是2的倍数,则2和n的最小公倍数是n,否则是2*n:public:

2023-04-21 13:48:03 60 1

空空如也

空空如也

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

TA关注的人

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