算法
文章平均质量分 63
李莲花*
一勤万事通 一懒万事空
展开
-
LeetCode 239. 滑动窗口最大值 | C++语言版
给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。返回 滑动窗口中的最大值 。原创 2023-03-13 21:29:20 · 347 阅读 · 0 评论 -
LeetCode 283. 移动零 | C语言版
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。请注意 ,必须在不复制数组的情况下原地对数组进行操作。原创 2023-03-13 10:13:29 · 571 阅读 · 1 评论 -
LeetCode 581. 最短无序连续子数组 | C语言版
给你一个整数数组 nums ,你需要找出一个 连续子数组 ,如果对这个子数组进行升序排序,那么整个数组都会变为升序排序。请你找出符合题意的 最短 子数组,并输出它的长度。原创 2023-03-09 19:42:00 · 194 阅读 · 0 评论 -
LeetCode 84. 柱状图中最大的矩形 | C语言版
给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。求在该柱状图中,能够勾勒出来的矩形的最大面积。原创 2023-03-07 21:30:52 · 200 阅读 · 0 评论 -
LeetCode739. 每日温度 | C++语言版
给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用 0 来代替。原创 2023-03-04 23:10:02 · 555 阅读 · 0 评论 -
LeetCode 20. 有效的括号 | C/C++语言版
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。每个右括号都有一个对应的相同类型的左括号。原创 2023-03-04 17:35:54 · 297 阅读 · 0 评论 -
LeetCode 725. 分隔链表 | C语言版
给你一个头结点为 head 的单链表和一个整数 k ,请你设计一个算法将链表分隔为 k 个连续的部分。每部分的长度应该尽可能的相等:任意两部分的长度差距不能超过 1 。这可能会导致有些部分为 null 。这 k 个部分应该按照在链表中出现的顺序排列,并且排在前面的部分的长度应该大于或等于排在后面的长度。返回一个由上述 k 部分组成的数组。原创 2023-03-01 22:03:17 · 277 阅读 · 0 评论 -
LeetCode 1171. 从链表中删去总和值为零的连续节点 | C语言版
给你一个链表的头节点 head,请你编写代码,反复删去链表中由 总和 值为 0 的连续节点组成的序列,直到不存在这样的序列为止。原创 2023-02-28 20:14:56 · 214 阅读 · 0 评论 -
LeetCode 147. 对链表进行插入排序 | C/C++版
给定单个链表的头 head ,使用 插入排序 对链表进行排序,并返回 排序后链表的头 。插入排序 算法的步骤:插入排序是迭代的,每次只移动一个元素,直到所有元素可以形成一个有序的输出列表。每次迭代中,插入排序只从输入数据中移除一个待排序的元素,找到它在序列中适当的位置,并将其插入。重复直到所有输入数据插入完为止。下面是插入排序算法的一个图形示例。部分排序的列表(黑色)最初只包含列表中的第一个元素。每次迭代时,从输入数据中删除一个元素(红色),并就地插入已排序的列表中。对链表进行插入排序。原创 2023-02-28 17:05:49 · 618 阅读 · 0 评论 -
LeetCode 21.23.&&剑指 Offer II 078. 合并两个有序链表 | C语言版
给定一个链表数组,每个链表都已经按升序排列。请将所有链表合并到一个升序链表中,返回合并后的链表。原创 2023-02-26 21:58:12 · 580 阅读 · 0 评论 -
LeetCode 24. 两两交换链表中的节点 | C语言版
给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)原创 2023-02-26 19:49:39 · 224 阅读 · 0 评论 -
LeetCode 328. 奇偶链表 | C语言版
给定单链表的头节点 head ,将所有索引为奇数的节点和索引为偶数的节点分别组合在一起,然后返回重新排序的列表。第一个节点的索引被认为是 奇数 , 第二个节点的索引为 偶数 ,以此类推。请注意,偶数组和奇数组内部的相对顺序应该与输入时保持一致。你必须在 O(1) 的额外空间复杂度和 O(n) 的时间复杂度下解决这个问题。原创 2023-02-25 22:51:02 · 819 阅读 · 1 评论 -
LeetCode 剑指 Offer 31. 栈的压入、弹出序列 | C/C++/java语言版
输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如,序列 {1,2,3,4,5} 是某栈的压栈序列,序列 {4,5,3,2,1} 是该压栈序列对应的一个弹出序列,但 {4,3,5,1,2} 就不可能是该压栈序列的弹出序列。原创 2023-02-24 21:29:15 · 191 阅读 · 0 评论 -
LeetCode 61. 旋转链表 | C语言版
给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置。原创 2023-02-23 17:26:30 · 303 阅读 · 0 评论 -
LeetCode 92. 反转链表 II | C语言版
给你单链表的头指针 head 和两个整数 left 和 right ,其中 left原创 2023-02-21 19:01:06 · 342 阅读 · 0 评论 -
LeetCode 876. 链表的中间结点 | C语言版
给定一个头结点为 head 的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。原创 2023-02-20 17:20:27 · 161 阅读 · 0 评论 -
LeetCode 203. 移除链表元素 | C语言版
给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。原创 2023-02-20 16:58:12 · 281 阅读 · 0 评论 -
LeetCode 83&&83. 删除排序链表中的重复元素 | C语言版
82.给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。83.给定一个已排序的链表的头 head , 删除原始链表中所有重复数字的节点,只留下不同的数字 。返回 已排序的链表 。原创 2023-02-19 21:16:47 · 335 阅读 · 0 评论 -
LeetCode 2. 两数相加 | C语言
给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。原创 2023-02-16 22:52:46 · 206 阅读 · 0 评论 -
LeetCode 19. 删除链表的倒数第 N 个结点 | C语言版
给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。原创 2023-02-15 21:20:24 · 118 阅读 · 0 评论 -
LeetCode 142. 环形链表 II (环的入口节点)| C语言版
给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。不允许修改 链表。原创 2023-02-15 19:57:42 · 233 阅读 · 0 评论 -
LeetCode 234. 回文链表 | C语言版
给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 。原创 2023-02-14 23:07:10 · 425 阅读 · 0 评论 -
LeetCode 141. 环形链表 | C语言版
给你一个链表的头节点 head ,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。注意:pos 不作为参数进行传递 。仅仅是为了标识链表的实际情况。如果链表中存在环 ,则返回 true 。 否则,返回 false 。原创 2023-02-13 20:44:59 · 158 阅读 · 0 评论 -
LeetCode 160. 相交链表 | C语言版
给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null原创 2023-02-13 20:29:16 · 244 阅读 · 0 评论 -
LeetCode 206. 反转链表 | C语言版
给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。原创 2023-02-12 20:28:00 · 121 阅读 · 0 评论 -
LeetCode Top100:两数之和-java版
leetCode Top100-java版本多路题解原创 2022-08-11 17:50:24 · 338 阅读 · 0 评论 -
两个链表的第一个公共(重合)结点-java版-LeetCode || NowCoder
剑指OfferJZ36:两个链表的第一个公共结点-java版JZ36 两个链表的第一个公共结点JZ36 两个链表的第一个公共结点描述输入两个无环的单链表,找出它们的第一个公共结点。(注意因为传入数据是链表,所以错误测试数据的提示是用其他方式显示的,保证传入数据是正确的)示例1输入:{1,2,3},{4,5},{6,7}返回值:{6,7}说明:第一个参数{1,2,3}代表是第一个链表非公共部分,第二个参数{4,5}代表是第二个链表非公共部分,最后的{6,7}表示的是2个链表的公共部原创 2021-09-01 17:46:42 · 317 阅读 · 0 评论 -
剑指OfferJZ16:合并两个排序的链表-java版
剑指OfferJZ16:合并两个排序的链表-java版JZ16 合并两个排序的链表JZ16 合并两个排序的链表描述输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。示例1输入:{1,3,5},{2,4,6}返回值:{1,2,3,4,5,6}建立一个用于存放合并后的链表的大链表 listNode由于两个链表中数字都是有序的,我们可以这样:如果两个链表list1和list2都有数字,这时我们将链表list1的第一个数和链表list2的第原创 2021-08-30 16:27:00 · 134 阅读 · 0 评论 -
剑指OfferJZ3:从尾到头打印链表-java版
剑指OfferJZ3:从尾到头打印链表-java版JZ3:从尾到头打印链表JZ3:从尾到头打印链表输入一个链表的头节点,按链表从尾到头的顺序返回每个节点的值(用数组返回)。如输入{1,2,3}的链表如下图:返回一个数组为[3,2,1]0 <= 链表长度 <= 10000法一:使用栈(先进先出)把链表中的数依次放入栈中,再从栈中依次取出,根据栈先进后出的特点,正好满足按从尾到头的顺序返回链表每个节点的值 public class jz3 { public Arra原创 2021-08-30 14:44:47 · 145 阅读 · 1 评论 -
剑指OfferJZ19:顺时针打印矩阵-java版
剑指OfferJZ3219:顺时针打印矩阵-java版JZ19:则依次打印出数字JZ19:则依次打印出数字[1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10]示例1输入: [[1,2,3],[4,5,6],[7,8,9]]返回值: [1,2,4,3]我们可以把二维数组的每一层拆解为上下左右四条边,既然题目要求顺时针遍历,我们对边的访问顺序就应该是:上,右,下,左,也即是往右,往下,往左,往上我们可以用flag变量来标记当前遍历矩阵的方向:1:往右,2:往下原创 2021-08-30 13:01:11 · 218 阅读 · 0 评论 -
剑指OfferJZ32:把数组排成最小的数-java版
剑指OfferJZ32:把数组排成最小的数-java版JZ32:输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。JZ32:输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。解这道题一开始我们可能会这样做:将数组中的所有数字比较一下大小,按从小到大的顺序将原创 2021-08-10 09:18:41 · 154 阅读 · 0 评论 -
剑指OfferJZ35:数组中的逆序对-java版
剑指OfferJZ35:数组中的逆序对-java版JZ35:在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007对于50\%50%的数据,size\leq 10^4size≤104对于100\%100%的数据,size\leq 10^5size≤105JZ35:在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出原创 2021-07-28 21:23:39 · 235 阅读 · 0 评论 -
剑指OfferJZ42:和为S的两个数字-java版
剑指OfferJZ42:和为S的两个数字-java版JZ42:输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,返回两个数的乘积最小的,如果无法找出这样的数字,返回一个空数组即可JZ42:输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,返回两个数的乘积最小的,如果无法找出这样的数字,返回一个空数组即可首先在数组中找到两个数和为数字S的在递增排序的数组中,(如果不是有序数组需要变成有序的有利于原创 2021-07-23 10:02:21 · 157 阅读 · 0 评论 -
剑指OfferJZ37:数字在升序数组中出现的次数-java版
剑指OfferJZ37:数字在升序数组中出现的次数-java版JZ37:统计一个数字在升序数组中出现的次数JZ37:统计一个数字在升序数组中出现的次数统计一个数字在升序数组中出现的次数,那么这个数在数组中的排序一定是连续的二分查找定义:它是一种效率较高的查找方法。但是,二分查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列在排序好的数组中查找数字,可以使用二分法来查找二分查找过程:将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后原创 2021-07-22 15:13:35 · 156 阅读 · 1 评论 -
剑指OfferJZ13:调整数组顺序使奇数位于偶数前面-java版
剑指OfferJZ13:调整数组顺序使奇数位于偶数前面-java版JZ13:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变JZ13:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变法一:遍历数组,遇到奇数就往前移一位 public class jz13{原创 2021-07-21 09:38:49 · 175 阅读 · 0 评论 -
剑指OfferJZ28:数组中出现次数超过一半的数字-java版
剑指OfferJZ28:数组中出现次数超过一半的数字-java版JZ28:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组[1,2,3,2,2,2,5,4,2]。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。你可以假设数组是非空的,并且给定的数组总是存在多数元素。1<=数组长度<=50000JZ28:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组[1,2,3,2,2,2,5,4,2]。由于数字2在原创 2021-07-20 13:37:12 · 177 阅读 · 2 评论 -
剑指OfferJZ51:构建乘积数组-java版
剑指OfferJZ51:构建乘积数组-java版JZ51:给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,...,n-1],其中B中的元素B[i]=A[0]*A[1]*...*A[i-1]*A[i+1]*...*A[n-1]。不能使用除法。(注意:规定B[0] = A[1] * A[2] * ... * A[n-1],B[n-1] = A[0] * A[1] * ... * A[n-2];)对于A长度为1的情况,B无意义,故而无法构建,因此该情况不会存在JZ51:给定一个数组A[0,1原创 2021-07-20 09:48:31 · 108 阅读 · 0 评论 -
剑指OfferJZ7:斐波那契数列-java版
剑指OfferJZ7:斐波那契数列-java版JZ7:大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0,第1项是1)JZ7:大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0,第1项是1)斐波那契数列:满足这样一个等式f[n] = f[n - 1] + f[n - 2]并且f[1]=1 f[2]=1所以斐波那契数列就可以推出来了f[3]=f[1]+f[2]f[4]=f[2]+f[3]f[原创 2021-07-17 10:05:41 · 122 阅读 · 0 评论 -
剑指OfferJZ22:从上往下打印二叉树-java版
剑指OfferJZ22:从上往下打印二叉树JZ22:从上往下打印出二叉树的每个节点,同层节点从左至右打印。JZ22:从上往下打印出二叉树的每个节点,同层节点从左至右打印。深搜(dfs)深搜,看名字就知道到是优先往深处找,不撞南墙终不悔。深搜,像是一个人走迷宫,遇见岔路不知道怎么走,就瞎选一个(程序中一搬从头遍历),走到底,不对,回到岔路口,选另一条路,接着走。深搜的实现一般用栈或递归,不断深入。宽搜(bfs)宽搜全名宽度搜索,就是放宽了搜,就像是雷达那样,中间一个点不断放出电磁波,一圈一圈往外原创 2021-07-13 10:33:48 · 1184 阅读 · 0 评论 -
剑指OfferJZ58:对称的二叉树-java版
剑指OfferJZ58:对称的二叉树JZ58:请实现一个函数,用来判断一棵二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。JZ58:请实现一个函数,用来判断一棵二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。该题判断二叉树是否对称,即判断这颗二叉树的左右两个子树是否为镜像二叉树详情见:镜像二叉树public class jz58 { boolean isSymmetrical(TreeNode pRoot) {原创 2021-07-13 10:02:17 · 1169 阅读 · 0 评论