LeetCode算法破解器
文章平均质量分 53
可持续化发展
勤学如春起之苗,不见其增,日有所长;辍学如磨刀之石,不见其损,日有所亏。
展开
-
我刷过的LeetCode题目与心得
https://blog.csdn.net/qq_37905259/article/details/119474995226. 翻转二叉树112. 路径总和111.二叉树的最小深度104.二叉树的最大深度https://blog.csdn.net/qq_37905259/article/details/12004749746. 全排列,字节后端一面机试https://blog.csdn.net/qq_37905259/article/details/119749800215. ..原创 2021-09-02 06:56:36 · 150 阅读 · 0 评论 -
24. 两两交换链表中的节点
给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。输入:head = [1,2,3,4]输出:[2,1,4,3]示例 2:输入:head = []输出:[]示例 3:输入:head = [1]输出:[1]提示:链表中节点的数目在范围 [0, 100] 内自己在纸上画画图,就很清晰了。由于是内网,无法上传图片。原创 2022-10-19 11:46:35 · 327 阅读 · 1 评论 -
23. 合并K个升序链表 Java
给你一个链表数组,每个链表都已经按升序排列。请你将所有链表合并到一个升序链表中,返回合并后的链表。示例 1:输入:lists = [[1,4,5],[1,3,4],[2,6]]输出:[1,1,2,3,4,4,5,6]解释:链表数组如下:[ 1->4->5, 1->3->4, 2->6]将它们合并到一个有序链表中得到。1->1->2->3->4->4->5->6示例 2:输入:lists = []...原创 2021-11-17 14:01:30 · 773 阅读 · 0 评论 -
22. 括号生成 Java
数字n代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且有效的括号组合。有效括号组合需满足:左括号必须以正确的顺序闭合。示例 1:输入:n = 3输出:["((()))","(()())","(())()","()(())","()()()"]示例 2:输入:n = 1输出:["()"]提示:1 <= n <= 8假设序列中全部都是小括号(即只有一类括号),满足这两个条件的括号组合一定是有效的括号组合。1、任意前缀中...原创 2021-11-08 23:41:33 · 480 阅读 · 0 评论 -
21. 合并两个有序链表 Java
将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例 2:输入:l1 = [], l2 = []输出:[]示例 3:输入:l1 = [], l2 = [0]输出:[0]二路归并算法就是两个指针嘛链表是有序的。每次找到剩余节点的最小值,把这个最小值排到新链表的最后。...原创 2021-11-08 09:38:47 · 235 阅读 · 0 评论 -
20. 有效的括号 Java
给定一个只包括 '(',')','{','}','[',']'的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。示例 1:输入:s = "()"输出:true示例2:输入:s = "()[]{}"输出:true示例3:输入:s = "(]"输出:false示例4:输入:s = "([)]"输出:false示例5:输入:s = "{[]}"输出:true巧计,利...原创 2021-11-07 11:44:13 · 202 阅读 · 0 评论 -
19. 删除链表的倒数第 N 个结点 Java
给你一个链表,删除链表的倒数第n个结点,并且返回链表的头结点。进阶:你能尝试使用一趟扫描实现吗?示例 1:输入:head = [1,2,3,4,5], n = 2输出:[1,2,3,5]示例 2:输入:head = [1], n = 1输出:[]示例 3:输入:head = [1,2], n = 1输出:[1]处理链表类的问题,对于链表头节点可能变化的情况,就加一个虚拟头节点,减少特殊情况的处理。链表的问题一定要画图。破解版...原创 2021-11-07 10:19:50 · 334 阅读 · 0 评论 -
18. 四数之和 Java
给你一个由 n 个整数组成的数组nums ,和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组[nums[a], nums[b], nums[c], nums[d]](若两个四元组元素一一对应,则认为两个四元组重复):0 <= a, b, c, d< na、b、c 和 d 互不相同nums[a] + nums[b] + nums[c] + nums[d] == target你可以按 任意顺序 返回答案 。示例 1:输入:nums = [1,0,...原创 2021-11-02 09:48:42 · 133 阅读 · 0 评论 -
17. 电话号码的字母组合 Java
给定一个仅包含数字2-9的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。示例 1:输入:digits = "23"输出:["ad","ae","af","bd","be","bf","cd","ce","cf"]示例 2:输入:digits = ""输出:[]示例 3:输入:digits = "2"输出:["a","b","c"]提示:0 <= digits.len...原创 2021-11-01 20:02:40 · 534 阅读 · 0 评论 -
16. 最接近的三数之和 java Java 中Pair的使用
给定一个包括n 个整数的数组nums和 一个目标值target。找出nums中的三个整数,使得它们的和与target最接近。返回这三个数的和。假定每组输入只存在唯一答案。示例:输入:nums = [-1,2,1,-4], target = 1输出:2解释:与 target 最接近的和是 2 (-1 + 2 + 1 = 2) 。...原创 2021-10-30 23:52:37 · 602 阅读 · 0 评论 -
15. 三数之和 Java
给你一个包含 n 个整数的数组nums,判断nums中是否存在三个元素 a,b,c ,使得a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。注意:答案中不可以包含重复的三元组。示例 1:输入:nums = [-1,0,1,2,-1,-4]输出:[[-1,-1,2],[-1,0,1]]示例 2:输入:nums = []输出:[]示例 3:输入:nums = [0]输出:[]双指针算法需要数组有序。先想一想,暴力怎么做?再看看,有没有...原创 2021-10-26 10:20:16 · 208 阅读 · 0 评论 -
14. 最长公共前缀 Java
编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串""。示例 1:输入:strs = ["flower","flow","flight"]输出:"fl"示例 2:输入:strs = ["dog","racecar","car"]输出:""解释:输入不存在公共前缀。public class Solution { public String longestCommonPrefix(String[] strs) { S.原创 2021-10-22 20:32:33 · 226 阅读 · 0 评论 -
13. 罗马数字转整数 Java
罗马数字包含以下七种字符:I,V,X,L,C,D和M。例如, 罗马数字 2 写做II,即为两个并列的 1。12 写做XII,即为X+II。 27 写做XXVII, 即为XX+V+II。通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做IIII,而是IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 。同样地,数字 9 表示为IX。这个特殊的规则只适用于以下六种情况:...原创 2021-10-22 09:38:57 · 300 阅读 · 0 评论 -
12. 整数转罗马数字 Java
罗马数字包含以下七种字符:I,V,X,L,C,D和M。例如, 罗马数字 2 写做II,即为两个并列的 1。12 写做XII,即为X+II。 27 写做XXVII, 即为XX+V+II。通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做IIII,而是IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 。同样地,数字 9 表示为IX。这个特殊的规则只适用于以下六种情况:给你一个整...原创 2021-10-21 09:40:13 · 317 阅读 · 0 评论 -
11. 盛最多水的容器 Java
给你 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点(i,ai) 。在坐标内画 n 条垂直线,垂直线 i的两个端点分别为(i,ai) 和 (i, 0) 。找出其中的两条线,使得它们与x轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器。示例 2:输入:height = [1,1]输出:1示例 3:输入:height = [4,3,2,1,4]输出:16示例 4:输入:height = [1,2,1]输出:2...原创 2021-10-21 09:34:06 · 218 阅读 · 0 评论 -
10. 正则表达式匹配
给你一个字符串s和一个字符规律p,请你来实现一个支持 '.'和'*'的正则表达式匹配。'.' 匹配任意单个字符'*' 匹配零个或多个前面的那一个元素所谓匹配,是要涵盖整个字符串s的,而不是部分字符串。示例 1:输入:s = "aa" p = "a"输出:false解释:"a" 无法匹配 "aa" 整个字符串。示例 2:输入:s = "aa" p = "a*"输出:true解释:因为 '*' 代表可以匹配零个或多个前面的那一个元素, 在这里前面的元素就是 '...原创 2021-10-15 08:58:36 · 92 阅读 · 0 评论 -
9. 回文数
给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。示例 1:输入:x = 121输出:true示例2:输入:x = -121输出:false解释:从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。示例 3:输入:x = 10输出:false解释:从右向左读, 为 01 。因此它不是一个回文数。示例.原创 2021-10-14 19:51:47 · 102 阅读 · 0 评论 -
8. 字符串转换整数 (atoi)
请你来实现一个myAtoi(string s)函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi 函数)。函数myAtoi(string s) 的算法如下:读入字符串并丢弃无用的前导空格检查下一个字符(假设还未到字符末尾)为正还是负号,读取该字符(如果有)。 确定最终结果是负数还是正数。 如果两者都不存在,则假定结果为正。读入下一个字符,直到到达下一个非数字字符或到达输入的结尾。字符串的其余部分将被忽略。将前面步骤读入的这些数字转换为整数(即,"1...原创 2021-10-14 14:16:25 · 141 阅读 · 0 评论 -
7. 整数反转
给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。如果反转后整数超过 32 位的有符号整数的范围[−231,231− 1] ,就返回 0。假设环境不允许存储 64 位整数(有符号或无符号)。示例 1:输入:x = 123输出:321示例 2:输入:x = -123输出:-321示例 3:输入:x = 120输出:21示例 4:输入:x = 0输出:0 我们尝试用数学的做法,就是那个《秦九韶算法》。...原创 2021-10-14 09:36:35 · 123 阅读 · 0 评论 -
6. Z 字形变换
将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行Z 字形排列。比如输入字符串为 "PAYPALISHIRING"行数为 3 时,排列如下:P A H NA P L S I I GY I R之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"PAHNAPLSIIGYIR"。请你实现这个将字符串进行指定行数变换的函数:string convert(string s, int numRows);示例 1:输入..原创 2021-10-13 09:45:47 · 90 阅读 · 0 评论 -
5. 最长回文子串
给你一个字符串s,找到s中最长的回文子串。示例 1:输入:s = "babad"输出:"bab"解释:"aba" 同样是符合题意的答案。示例 2:输入:s = "cbbd"输出:"bb"示例 3:输入:s = "a"输出:"a"示例 4:输入:s = "ac"输出:"a"提示:1 <= s.length <= 1000 s仅由数字和英文字母(大写和/或小写)组成/** * <p>Title: </p> *...原创 2021-10-12 09:56:47 · 103 阅读 · 0 评论 -
105. 从前序与中序遍历序列构造二叉树
给定一棵树的前序遍历preorder与中序遍历inorder。请构造二叉树并返回其根节点。示例 1:Input: preorder = [3,9,20,15,7], inorder = [9,3,15,20,7]Output: [3,9,20,null,null,15,7]示例 2:Input: preorder = [-1], inorder = [-1]Output: [-1]提示:1 <= preorder.length <= 3000inor...原创 2021-10-02 12:39:00 · 137 阅读 · 0 评论 -
124. 二叉树中的最大路径和
路径 被定义为一条从树中任意节点出发,沿父节点-子节点连接,达到任意节点的序列。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点,且不一定经过根节点。路径和 是路径中各节点值的总和。给你一个二叉树的根节点 root ,返回其 最大路径和 。/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * .原创 2021-10-02 11:14:54 · 153 阅读 · 0 评论 -
3. 无重复字符的最长子串 4. 寻找两个正序数组的中位数 java
3. 无重复字符的最长子串给定一个字符串s,请你找出其中不含有重复字符的最长子串的长度。示例1:输入: s = "abcabcbb"输出: 3解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2:输入: s = "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。示例 3:输入: s = "pwwkew"输出: 3解释: 因为无重复字符的最长子串是"wke",所以其长度为 3。 请注意,你的答...原创 2021-09-25 11:45:23 · 109 阅读 · 0 评论 -
2.两数相加 java
给你两个非空 的链表,表示两个非负的整数。它们每位数字都是按照逆序的方式存储的,并且每个节点只能存储一位数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0开头。示例 1:输入:l1 = [2,4,3], l2 = [5,6,4]输出:[7,0,8]解释:342 + 465 = 807.示例 2:输入:l1 = [0], l2 = [0]输出:[0]示例 3:输入:l1 = [9,9,9,9,9,9...原创 2021-09-24 09:43:19 · 107 阅读 · 0 评论 -
1.两数之和 Java
给定一个整数数组 nums和一个整数目标值 target,请你在该数组中找出 和为目标值 target的那两个整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。示例 1:输入:nums = [2,7,11,15], target = 9输出:[0,1]解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。示例 2:输入:nums = [3,2,4], targe...原创 2021-09-23 23:36:11 · 111 阅读 · 0 评论 -
509. 斐波那契数
斐波那契数,通常用F(n) 表示,形成的序列称为 斐波那契数列 。该数列由0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是:F(0) = 0,F(1)= 1F(n) = F(n - 1) + F(n - 2),其中 n > 1给你 n ,请计算 F(n) 。1、暴力递归斐波那契数列的数学形式就是递归的,画一下递归树,暴力递归是从上往下递归到最低层(找到最底层,递归的终止条件),然后,从下往上依次递归出结果(把结果从最底层开始,通过不断的return,把...原创 2021-09-02 20:53:30 · 172 阅读 · 0 评论 -
100. 相同的树
给你两棵二叉树的根节点p和q,编写一个函数来检验这两棵树是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNo...原创 2021-09-02 20:28:02 · 103 阅读 · 0 评论 -
深度优先搜索
深度优先遍历 只要前面有可以走的路,就会一直向前走,直到无路可走才会回头;「无路可走」有两种情况:① 遇到了墙;② 遇到了已经走过的路;在「无路可走」的时候,沿着原路返回,直到回到了还有未走过的路的路口,尝试继续走没有走过的路径;有一些路径没有走到,这是因为找到了出口,程序就停止了;「深度优先遍历」也叫「深度优先搜索」,遍历是行为的描述,搜索是目的(用途);通过遍历 所有 的可能的情况达到搜索的目的。遍历是手段,搜索是目的。二叉树深度优先遍历的递归终止条件:遍历完一棵树的 所有 叶子结点,等.原创 2021-08-07 09:02:18 · 185 阅读 · 0 评论 -
46. 全排列,字节后端一面机试
给定一个不含重复数字的数组nums,返回其所有可能的全排列。你可以按任意顺序返回答案。示例 1:输入:nums = [1,2,3]输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]示例 2:输入:nums = [0,1]输出:[[0,1],[1,0]]示例 3:输入:nums = [1]输出:[[1]]提示:1 <= nums.length <= 6 -10 <= nums[i] <...原创 2021-09-01 19:49:49 · 183 阅读 · 0 评论 -
数据结构--堆
目录堆的定义堆的分类堆的插入堆的删除用数组来表示完全二叉树创建堆插入元素获取堆顶元素删除元素获取堆的长度最小堆最大堆堆排序堆的定义堆是一种特别的二叉树,满足以下条件的二叉树,可以称之为堆:完全二叉树; 每一个节点的值都必须大于等于或者小于等于其孩子节点的值。堆 具有以下的特点:可以在 O(logN) 的时间复杂度内向 堆 中插入元素;可以在 O(logN) 的时间复杂度内向 堆 中删除元素;可以在 O(1)的...转载 2021-08-18 09:33:20 · 328 阅读 · 0 评论 -
215. 数组中的第K个最大元素
给定整数数组nums和整数k,请返回数组中第k个最大的元素。请注意,你需要找的是数组排序后的第k个最大的元素,而不是第k个不同的元素。示例 1:输入: [3,2,1,5,6,4] 和 k = 2输出: 5示例2:输入: [3,2,3,1,2,4,5,5,6] 和 k = 4输出: 4快速排序的最差的时间复杂度为O()快速排序的解法,一轮for循环会排好一个基数的位置。从小到大。我们只...原创 2021-08-17 10:22:04 · 263 阅读 · 0 评论 -
LeetCode 146. LRU 缓存机制
运用你所掌握的数据结构,设计和实现一个LRU (最近最少使用) 缓存机制 。实现 LRUCache 类:LRUCache(int capacity) 以正整数作为容量capacity 初始化 LRU 缓存 int get(int key) 如果关键字 key 存在于缓存中,则返回关键字的值,否则返回 -1 。 void put(int key, int value)如果关键字已经存在,则变更其数据值;如果关键字不存在,则插入该组「关键字-值」。当缓存容量达到上限时,它应该在写入新数据之前删...原创 2021-08-16 17:24:11 · 104 阅读 · 0 评论 -
LeetCode 206. 反转链表
给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。输入:head = [1,2,3,4,5]输出:[5,4,3,2,1]输入:head = [1,2]输出:[2,1]输入:head = []输出:[]/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * List原创 2021-08-11 07:28:10 · 87 阅读 · 0 评论