
leetcode
没有韭菜的饺子
沙袋一枚萌新饺子
展开
-
堆排序梳理
aaa。原创 2024-08-06 14:32:25 · 145 阅读 · 0 评论 -
排序算法总结
希尔排序是插入排序的优化版本,最后一轮增量为1的时候即为插入排序。它通过交换两个较远位置的数字来达成一次交换能消除一个以上的逆序对。打破在O(1)空间复杂度的情况下,时间复杂度始终为O(n^2)的问题。堆排序分为三个步骤:一是创建大根堆,然后将最大的元素放置到数组末尾;二是对剩余的元素重新进行大根堆的调整。三是重复操作,直到数组有序。快速排序是一种考的比较多的排序,它的思路是首先取出一个基数(pivot),然后将数组中比它小的元素放在它的左侧,而比它大的元素放在右侧。原创 2024-07-26 15:10:43 · 903 阅读 · 0 评论 -
leetcode 147. 对链表进行插入排序
因为last及其之前的节点都已经是有序的了,那么我们就从dummyHead向后寻找那个位置,即pre(初始为dummyHead,逐渐向后寻找).next.val <= cur.val。(2)last.val > cur.val 此时需要将cur向前进行插入,那么我们需要寻找插入的位置。如果说(1)last.val <= cur.val 那么我们不需要进行排序,继续向后移动。首先我们使用两个指针,一个last和一个cur进行标记,比较他们两的大小。寻找到这个位置后,我们就可以进行一番操作。原创 2024-07-14 17:25:19 · 507 阅读 · 0 评论 -
leetcode 排序算法的稳定性
假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,r[i] = r[j],且 r[i] 在 r[j] 之前,而在排序后的序列中,r[i] 仍在 r[j] 之前,则称这种排序算法是稳定的;比如数列:[2, 2, 1],在选择排序中第一次进行交换时,原数列中的两个 2 的相对顺序就被改变了,因此,我们说选择排序是不稳定的。冒泡排序中,只有左边的数字大于右边的数字时才会发生交换,相等的数字之间不会发生交换,所以它是稳定的。原创 2024-07-14 17:16:17 · 537 阅读 · 0 评论 -
leetcode 153. 寻找旋转排序数组中的最小值
(1)如果中间元素比最后一个元素小,这说明:中间元素在最小元素的右侧(或就是中间元素);所以我们舍弃掉右半边的元素,保留左半边的元素。(2)如果中间元素比最后一个元素大,这说明:中间元素在最小元素的左侧(或就是中间元素);所以我们舍弃掉左半边元素,保留右半边的元素。然而,因为数组进行一定程度的旋转,所以可以使用二分查找吗?这就让我们想到了——二分查找的运用。时间复杂度为O(log n)对数组中最后一个元素进行考虑。原创 2024-07-13 23:22:23 · 338 阅读 · 0 评论 -
leetcode 283. 移动零
但是对于这一题而言,因为它需要交换的是0和另外一个非0数,所以我们可以直接覆盖0即可。最后再把0补上就行。用index记录已经覆盖到的位置,把从index到nums.length处的元素全部设为0即可。使用双指针:慢指针左边均为非0元素;快指针左边到左指针都为0。我们只需要不断的去交换这两个指针位置的元素即可。原创 2024-07-13 14:53:17 · 362 阅读 · 0 评论 -
leetcode 209. 长度最小的子数组
它基本上用掉了4ms左右的时间,后面把它改成fori求和就快了很多,只需要1ms。(1)首先找到一个大于target的窗口,这个过程是右窗口移动;1、暴力解法,对于每个索引开始的子数组进行遍历,效率很差。(3)记录这个最窗口长度,然后将右窗口向右移动一格;一开始的时候还在思考为什么做出来这题时间如此糟糕,(2)试图缩小窗口,即将左窗口向右移动;对于这种情况,我们首先想到的是双指针。(0)判断总和是否大于target。(4)重复2-3,找到最小窗口。原创 2024-07-12 15:19:34 · 206 阅读 · 0 评论 -
leetcode 27. 移除元素
我们用快指针去找与目标值相同的值,用慢指针来呈现新的数组内容(索引)。原创 2024-07-12 14:04:20 · 216 阅读 · 0 评论 -
leetcode 28.找出字符串中第一个匹配项的下标
【代码】leetcode 28.找出字符串中第一个匹配项的下标。原创 2024-07-11 16:45:14 · 213 阅读 · 0 评论 -
leetcode 5.最长回文子串
该函数结合奇数和偶数情况,对中心两侧的字符进行检查,以获取回文串的最大长度。在获取了最大长度后,加之中心字符的索引,我们就可以得到该回文字符串。这里需要注意返回的内容是right - left -1;1、奇数长度回文,以一个字符作为中心。2、偶数长度回文,以两个字符作为中心。如果不理解可以随手画个图感受一下。原创 2024-07-11 15:43:14 · 174 阅读 · 0 评论 -
leetcode 151. 反转字符串中的单词
在进行分割后将它转换为一个List,使用List的反转方法。(很一般leetcode这个)2、多余的空格处理:String[] strs = s.split(" ");当我们进行处理的时候,碰到strs[i]为空的时候,跳过即可。1、前导、尾随空格的处理:s = s.trim();用于去除字符串两端的空白字符,非常方便。大幅提升了时间效率,也减小了内存消耗。原创 2024-07-11 16:19:28 · 212 阅读 · 0 评论 -
leetcode 14.最长公共前缀
1、将第一个字符串拿出来,找它和下一个字符串的前缀交集,然后保存;再将保存的字符串和下一个继续进行比较,直到最后结束。然后对比每一个字符串的第i个字符是否相等,直到比较到不相等的时候退出循环,返回子串。2、纵向对比法,先找出最短的字符串,最长公共前缀长度一定小于等于这个字符串的长度。这种方法为横向对比法,效率很低。原创 2024-07-10 15:59:31 · 124 阅读 · 0 评论 -
java中字符串的比较和连接
s2是s1的另一个引用。如果使用==进行检查。原创 2024-07-10 15:18:18 · 119 阅读 · 0 评论 -
对角线遍历
例如:(1)坐标和为偶数,起始位置j = max(0,k - m + 1)3、坐标之和为奇数时从右上向左下放入数组;为偶数时从左下到右上放入数组。(2)坐标和为奇数,起始位置i = max(0,k - n + 1)1、每条对角线上的元素坐标之和相同为k = i + j,且递增。2、需要遍历的次数为m + n - 1条对角线。4、找出每条对角线开始元素的坐标。原创 2024-07-10 15:12:37 · 263 阅读 · 0 评论 -
n*n矩阵旋转-leetcode 48
这里还有一个知识点,不借助额外的存储空间,将int a和int b的值进行交换。那我们的思路:原第i行对应新第n-1-i列;原第j列对应新第j行(倒序)。最后a = 1 ^ 2 ^ 1 = 1 ^ 1 ^ 2 = 2。实际上我们就使用前面半句话即可,原第i行对应新第n-1-i列。如果不是n*n矩阵而是一个普通的矩阵,其次b = 1 ^ 2 ^ 2 = 1。且异或运算具有交换律和结合律。首先a = 1 ^ 2。1、顺时针旋转90度。2、逆时针旋转90度。原创 2024-07-09 17:21:37 · 187 阅读 · 0 评论