![](https://img-blog.csdnimg.cn/d0e2cb3d78bc48e5903e3a0be423f48e.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
算法
算法
雾喔
一个积极向上的00后,喜欢折腾一些有趣的东西。
展开
-
从今天开始深入学习 SQL 优化
关键字大写,保持统一。保持良好的换行,便于理清楚逻辑。and,or,逗号等放在行首,这样的好处是增加删除条件时比较方便,否则删除最后一个条件时还要去上一行末删除关联词。不用保证符号对齐, where条件field对齐即可。尽量查询的field前加上表的简称,提高代码可原创 2024-08-08 15:45:57 · 985 阅读 · 0 评论 -
287. 寻找重复数
给定一个包含n + 1个整数的数组nums,其数字都在[1, n]范围内(包括1和n),可知至少存在一个重复的整数。假设nums只有一个重复的整数,返回这个重复的数。原创 2024-08-08 09:54:38 · 407 阅读 · 0 评论 -
136. 只出现一次的数字
就在昨天晚上遭遇了游戏中的至暗时刻,喵的队友一直在抢我箱子,到最后撤离的时候我包里和刚开始进去的时候都没啥两样,就多了一块辐射区的变异骨头,然后头甲全碎了,子弹也没了,我真的服了。喵的下一局队友给了我金光闪闪的七级甲和七级头,在辐射区又见到了另一套七级套,顺利收进包里,就在我暗暗得瑟的时候突然冒出来一队人给我打死了,就给我剩下一个七级甲了,我真服了。近日身体抱恙,盲猜应该是上周周末自己做的饭太难吃了,故而导致现在的自己身体一直在抱恙,哎,等回家之后一定要学着做饭啊,做好吃的饭,不然养不活以后的我呀!原创 2024-08-06 11:20:09 · 255 阅读 · 0 评论 -
一顿操作猛如虎,结果我是二百五
给你一个二叉搜索树的根节点 root ,返回 树中任意两不同节点值之间的最小差值 。差值是一个正数,其数值等于两值之差的绝对值。原创 2024-06-20 10:31:03 · 240 阅读 · 2 评论 -
二叉树的层序遍历
二叉树的层序遍历是从上到下,从左到右依次访问每个节点的遍历方式。实现这种遍历方式可以使用队列数据结构。原创 2024-06-19 16:50:43 · 238 阅读 · 0 评论 -
二叉树(一)
此外,还有很多其他的二叉树变体,如满二叉树、完全二叉树等。原创 2024-06-14 22:19:39 · 211 阅读 · 0 评论 -
82. 删除排序链表中的重复元素 and II
近日总结:下下周考试,难受,还是建议预备大学生们,当你选择的专业涉及到技术,需要下载各种技术软件的话,电脑系统还是选择windows比较好,有不少技术软件居然不支持mac。至于具体两者有什么区别呢,第一道算法题是保留了重复元素,也就是最后的结果是链表中每个出现的数据都是唯一的,而第二道算法题则是去掉了重复的数据,只保留了只出现过一次的数据。也就是第一道是prev的下一个节点直接指向了重复节点,而第二道则是如果判断当前节点不唯一的话就直接指向了重复节点的下一个节点。原创 2024-06-11 22:10:11 · 399 阅读 · 0 评论 -
141. 环形链表
如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。注意:pos 不作为参数进行传递 。仅仅是为了标识链表的实际情况。如果链表中存在环 ,则返回 true 。 否则,返回 false 。原创 2024-06-08 10:14:55 · 295 阅读 · 0 评论 -
15. 三数之和
解题思路:最后的解题思路其实和前面的暴力解法思路一样,只是换成了while,由原来的三个for循环一个一个的遍历改成了一个for循环,一个while循环。过了45个测试案例, 当看到下面的预期结果时,我懵了,?看到题目,大家可能第一反应想到的是用递归,我偏偏反其道而行!终于,发现了原来是元组不重复,和索引下表不重复,我悟了......880ms,呵呵......好像是最慢的......然后看看评论区,咋没人说这个问题啊,是我着相了吗?我看成了不仅里面的三个元素,还有元组都不重复。原创 2024-05-09 20:41:56 · 337 阅读 · 0 评论 -
买卖股票的最佳时机
在测试案例中有一部分是巨量案例,看了其他官解,使用了一次for循环解决了这个问题,其实就是定义两个变量,分别是minprice(最小价格),maxprofit(最大利润,即差值),之后使用一个for循环,找出前面的小的元素记录下来,遇到比这个元素大的就与maxprofit做比较,比maxprofit大的话就更新maxprofit的值,这样一个for循环遍历下来,也就找到了最大差值。解题思路:首先看到这一题,我第一个想到的是使用暴力解法,直接两个for循环重拳出击,但是在提交代码后却显示超时。原创 2024-04-29 21:27:48 · 237 阅读 · 0 评论 -
80. 删除有序数组中的重复项 II
思路:根据nums中正负数的情况分成两个桶,一个装正数,一个装负数,中间不断的在判断......只通过了26个用例,因为没有考虑到还存在负数的情况。所以还再优化优化......我觉得我还可以再抢救一下。原创 2024-04-28 10:55:08 · 295 阅读 · 0 评论 -
动态规划-第 N 个泰波那契数-使用最小花费爬楼梯
近日总结:最近好困啊!解题思路:和斐波那契数一样。原创 2024-04-21 15:37:15 · 227 阅读 · 0 评论 -
动态规划-爬楼梯-斐波那契数
也就是说爬到第 x级台阶的方案数是爬到第 x−1 级台阶的方案数和爬到第x−2 级台阶的方案数的和,因为从第0级到1级只有一种方案,从0级到2级有2种方案,从1级到2级有一种方案,也就是当前的层级等于前面两个层级的累加。可以说,当遇到那种每次进行1或2的试探时可以考虑一下是否符合爬楼梯的思路。解题思路:看着这0 <= n <= 30的范围我陷入了沉思......解题思路:因为1<=n<=45,也可以用打表的方式解题,不过还是推荐根据:f(x)=f(x−1)+f(x−2)总结:万物皆可斐波那契......原创 2024-04-20 11:24:27 · 233 阅读 · 0 评论 -
92. 反转链表 II
然后进入一个for循环,这个循环的目的是通过一次次地更改节点的指向来达到反转链表的目的。看到这一题我的第一反应是直接修改节点的值,但是一般在面试的时候不允许修改节点的值,只能修改节点的指向。这是因为链表的反转可能会涉及到头结点的改动,使用虚拟头结点可以简化代码。是虚拟头结点,所以其下一个节点就是反转后的链表的头结点。先找到待反转链表的前一个节点,这个节点被命名为。的下一个节点,也就是处于left的节点。即为需要反转的第一个节点,显然。节点在原链表中移除了。的下一个节点,也就是把。位置前的那一个节点。原创 2024-04-17 11:38:40 · 365 阅读 · 0 评论 -
第 393 场周赛
给你一个字符串s,表示一个 12 小时制的时间格式,其中一些数字(可能没有)被替换。12 小时制时间格式为"HH:MM",其中HH的取值范围为00至11MM的取值范围为00至59。最早的时间为00:00,最晚的时间为11:59。你需要将s中的字符替换为数字,使得结果字符串代表的时间是一个的 12 小时制时间,并且是可能的时间。返回结果字符串。s = "1?4""11:54"通过替换字符,可以得到的最晚12小时制时间是"11:54"。s = "0?:5?"09:59"通过替换。原创 2024-04-14 16:12:51 · 533 阅读 · 0 评论 -
删除排序链表中的重复元素
近日总结:最近好累,啥也记不住,状态有些差,应该是因为熬夜......啊离谱!解题思路:和上一道一样,只是这一道算法题少了重复的值。删除原始链表中所有重复数字的节点,只留下不同的数字。删除所有重复的元素,使每个元素只出现一次。给定一个已排序的链表的头。给定一个已排序的链表的头。原创 2024-04-06 20:06:16 · 178 阅读 · 0 评论 -
BM83 字符串变形 java
分析:首先我第一个想到的是split,一开始我以为这道题需要去除所有的空格最后用空格连接,结果在通过一个案例的时候输出错误,空格是不允许去掉的,所以使用split就造成了空格的一些问题,这里我们使用StringBuffer。res.insert的每次插入都是同一个位置,所以保证了单词中字符的顺序。原创 2024-04-03 09:55:48 · 192 阅读 · 0 评论 -
java中split(“.“)失效问题
同时,字符 | * + 前面都得加上 \。在写到这道算法题的时候,发现一个问题,而如果是“”,就需要写成 \\。原创 2024-04-02 22:22:05 · 588 阅读 · 0 评论 -
算法-小记
这样是为了防止溢出,如果我们写成mid = (right + left) / 2,那么当right和left非常大的时候,它们的和可能会大于TMax造成溢出。总结:脑子混沌了......被问到的东西要么记不起来了,要么之前没涉及过。如果字符串超过 500000001位,不能转化为 BigInteger。即 Math.sqrt(n) = (x + n/x)/2。即 x + n/x = 2 Math.sqrt(n)因为在java中,x=Math.sqrt(n)牛顿迭代法用来求平方根,设要求n的平方根,即。原创 2024-04-02 09:04:00 · 377 阅读 · 0 评论 -
58. 最后一个单词的长度
直接暴力解法,先设置一个计数值,使用if else,倒序先判断是否为空,如果为空的话就判断计数值是否为0,因为如果是后面一直没有遇到非空的话计数值就为0,当遇到非空值的时候,就直接将计数值每次加一,直到继续遇到空的时候,这时候判断计数值是否为0,如果不为0,则证明已经遇到过第一次的非空值了。,由若干单词组成,单词前后用一些空格字符隔开。最后一个单词是长度为6的“joyboy”。最后一个单词是“World”,长度为5。最后一个单词是“moon”,长度为4。近日总结:疲惫,难受.......原创 2024-03-26 21:29:41 · 227 阅读 · 0 评论 -
第 389 场周赛
以某个字符开头和结尾的子字符串数量=字符串中字符的数量+字符两两匹配的数量当字符串中某个字符的数量等于1的时候,答案就是1,当大于1的时候,是按照这个规律递增的,因为是从2开始的,所以当某个字符的数量大于1的时候,就是按照n*(n-1)/2进行递增的,所以在代码中就需要先判断字符串长度等于1的情况,之后再找出某个字符在字符串中出现的次数,代入这个公式即可。原创 2024-03-17 15:29:01 · 918 阅读 · 0 评论 -
45. 跳跃游戏 II
定义三个变量,一个是用来遍历数组所有的元素,一个是用来记录遍历的过程中所获得的每次最大跳跃元素下标,一个用来记录跳跃了多少次。近日总结:累......心累......身体累......从下标为 0 跳到下标为 1 的位置,跳。向前跳转的最大长度。生成的测试用例可以到达。跳到最后一个位置的最小跳跃数是。步到达数组的最后一个位置。处,你可以跳转到任意。原创 2024-03-16 20:16:41 · 975 阅读 · 0 评论 -
应该当作是简单题的困难题-41. 缺失的第一个正数
解题思路:因为最小的正整数为1,所以从1开始计数,遇到1,2,3,4......连续的递增则进行加1,没有的话就不加,找出缺失的最小正整数。近日总结:我需要学习的还有很多,包括在面试的时候,我老觉得我说话磕磕绊绊的......,请你找出其中没有出现的最小的正整数。并且只使用常数级别额外空间的解决方案。范围 [1,2] 中的数字都在数组中。1 在数组中,但 2 没有。给你一个未排序的整数数组。最小的正数 1 没有出现。请你实现时间复杂度为。原创 2024-03-14 14:43:12 · 418 阅读 · 1 评论 -
简单题我重拳出击
你不需要考虑数组中超出新长度后面的元素。例如,函数返回的新长度为 2 ,而 nums = [2,2,3,3] 或 nums = [2,2,0,0],也会被视作正确答案。解释:函数应该返回新的长度 5, 并且 nums 中的前五个元素为 0, 1, 3, 0, 4。解释:函数应该返回新的长度 5 , 并且原数组 nums 的前五个元素被修改为 0, 1, 2, 3, 4。输入:nums = [0,1,2,2,3,0,4,2], val = 2。输入:nums = [0,0,1,1,1,2,2,3,3,4]原创 2024-03-09 11:45:07 · 912 阅读 · 0 评论 -
21. 合并两个有序链表
其中ListNode list=new ListNode(-1)中的val值是哪个都可以,都是为了后边方便指向下一个节点设立的。新链表是通过拼接给定的两个链表的所有节点组成的。看到递归往往就是一看就明白,一上手就大脑混乱。:可以使用暴力解法,直接一个一个进行比较。还有需要注意的是对val赋值,需要使用。将两个升序链表合并为一个新的。原创 2024-03-08 18:11:31 · 424 阅读 · 0 评论 -
20. 有效的括号
判断{ ( [ ,如果有相等的,就朝栈内压入另一半(. }. ]. ) ),之后,等另一半被比较到的时候再将另一半从栈顶弹出去,因为当括号有效的情况下,遇到的第一个右侧括号一定是在栈顶的,所以当遇到的右侧括号和栈顶元素不相等的时候就会返回一个false。一个很巧妙的思路,如果此字符串中的括号全都是有效的,则按照括号成对出现的话可以将长度看作是原长度的一半,之后循环一半长度的次数,使用字符串的replace()方法,来进行替换。如果是有效的括号,则会在每次替换都会去除一对有效的括号。原创 2024-03-07 20:26:30 · 464 阅读 · 0 评论 -
14. 最长公共前缀
解题思路:最长公共前缀一定是数组中最短的那个元素或者更短或者为“”,所以直接随机选择一个进行比较,首先先遍历所有的元素,同时代码块里面找出公共前缀,通过每次将元素的长度减一来实现,直到获取公共前缀或者长度为0.近日总结:感冒还没有好......鼻子堵了一天,还老酸了......编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串。输入不存在公共前缀。原创 2024-03-04 21:15:39 · 403 阅读 · 2 评论 -
8. 字符串转换整数 (atoi)
Character.isDigit( c ):其中c是字符,用于判断字符c是不是数字形式的字符原创 2024-03-02 09:54:00 · 1210 阅读 · 0 评论 -
7. 整数反转
近日总结:生病了还是不要硬扛,要根据自己的身体状况而定,看到别人直接扛过去了,那是因为别人的身体比你的好,你别傻乎乎的跟着别人学......无论是正数还是负数,都可以用这一段代码进行数据的反转,即利用%将值的每位都取出来乘以10相加,即是反转后的数据。最后进行比较,(int)表明将数据转为整型,如果溢出的话,肯定是不相等的,没有溢出的话,是相等的。最近感冒挺多的,挺多都是因为受寒,大家注意保暖呀。如果反转后整数超过 32 位的有符号整数的范围。给你一个 32 位的有符号整数。中的数字部分反转后的结果。原创 2024-03-02 08:54:49 · 344 阅读 · 0 评论 -
6. Z 字形变换
上方代码即先设置flag[0]为1,之后因为direction为1,所以一直递增,直到为4,这时候就会递减,使direction为-1,减到1,以此循环类推。解题思路:假设numRows为4,则s每一位行数就是:1234321234......,以从上往下、从左到右进行 Z 字形排列。可以创建一个flag数组,用来记录行数,之后直接遍历数组第一行开始获取数据即可。原创 2024-03-01 22:06:03 · 488 阅读 · 0 评论 -
5. 最长回文子串
如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。近日总结:emo......想水博客......即从每一个位置出发,向两边扩散即可。"aba" 同样是符合题意的答案。解题思路:中心扩散法。原创 2024-03-01 21:24:26 · 399 阅读 · 0 评论 -
114. 二叉树展开为链表
【代码】114. 二叉树展开为链表。原创 2024-02-27 21:28:48 · 340 阅读 · 0 评论 -
199. 二叉树的右视图
想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。近日总结:多爱自己。原创 2024-02-27 21:21:24 · 345 阅读 · 0 评论 -
560. 和为 K 的子数组
但是如果我们知道 [j,i][j,i][j,i] 子数组的和,就能 O(1)O(1)O(1) 推出 [j−1,i][j-1,i][j−1,i] 的和,因此这部分的遍历求和是不需要的,我们在枚举下标 jjj 的时候已经能 O(1)O(1)O(1) 求出 [j,i][j,i][j,i] 的子数组之和。在遍历的过程中,我们检查是否存在prefixSum[j] - k的前缀和,如果存在,说明从某个位置到当前位置的连续子数组的和为k,我们将对应的次数累加到结果中。来源:力扣(LeetCode)原创 2023-11-22 16:43:05 · 100 阅读 · 0 评论 -
799. 最长连续不重复子序列 java
此题属于java双指针算法,主要思想是:每当出现重复元素下标 i 时,从下标 j 开始移动,直至当 j-i 子串中不会再有重复的元素,此时可以另外使用一个数组,标记当前子串中个元素出现的次数。看上面这段代码,可以看到这是一个while循环,加上系统给的数据是递增的数组,所以不用担心不会出现一个新的可以使用的数组。给定一个长度为 n� 的整数序列,请找出最长的不包含重复的数的连续区间,输出它的长度。共一行,包含一个整数,表示最长的不包含重复的数的连续区间的长度。第一行包含整数 n�。原创 2023-11-01 21:08:15 · 258 阅读 · 0 评论 -
189. 轮转数组
所以可以将数组遍历n(数组长度)次,每一次都将当前元素轮转后下标对应的元素先存起来,然后将对应的元素进行交换,循环n次即可。此算法是要求数组原地进行轮转,经过分析,可以得出,每个元素在轮转之后的下标都为。官方的解决方法是new一个新的数组,并不是原数组进行轮转。向右轮转 1 步: [99,-1,-100,3]向右轮转 2 步: [3,99,-1,-100]也就是会出现轮转到已经轮转过的元素上去。,将数组中的元素向右轮转。原创 2023-10-26 15:53:16 · 105 阅读 · 0 评论 -
java与c++中的交换方法
最近在写算法的时候,遇到一个问题。java中编写swap(交换)方法还需要传入一个数组,但是在c++中则不需要。可以看到,在没有传入数组进行交换数组元素的时候,交换前与交换后的值是一样的。而在c++中:void Swap(int *p1,int *p2){ int tmp; tmp = *p1; *p1 = *p2; *p2 = tmp;}zaic中swap函数的交换是进行地址的交换。在Java中基本类型是按照值传递,当把对象传入方法,此时的对象是对象的引原创 2023-10-21 15:57:26 · 171 阅读 · 0 评论 -
剑指 Offer 58 - I. 翻转单词顺序
输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串"I am a student. ",则输出"student. a am I"。运用好split分割和trim去空格两个函数,当中间有多个空格时,判断应该适用"",而不是" "。输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。原创 2023-09-06 21:32:29 · 128 阅读 · 0 评论 -
整数拆分乘积最大
将一个整数拆分为若干个自然数的和,如果要使这些数的乘积最大,应该尽可能的拆分出3。任意一个数字可以由多个3的n次方的和(差)表示。原创 2023-08-28 17:05:27 · 266 阅读 · 0 评论 -
如果你和我加在一起能让我变得更好,那我们就在一起,否则我就丢下你,自己往前走如果前途和爱情二选一,毫不犹豫选前途~
输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。连续子数组 [4,-1,2,1] 的和最大,为 6。要求时间复杂度为O(n)。原创 2023-08-26 10:22:23 · 171 阅读 · 0 评论