
leetcode刷题
,zdc
太渺小了
展开
-
leetcode-3.无重复字符的最长子串
题目给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: s = “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。示例 2:输入: s = “bbbbb”输出: 1解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。示例 3:输入: s = “pwwkew”输出: 3解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。请注意,你的答案必须是 子串 的长度,“pwke” 是一个原创 2021-10-23 23:34:26 · 122 阅读 · 0 评论 -
leetcode-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,9], l2原创 2021-10-23 22:46:12 · 149 阅读 · 0 评论 -
1104. 二叉树寻路(java)
题目在一棵无限的二叉树上,每个节点都有两个子节点,树中的节点 逐行 依次按 “之” 字形进行标记。如下图所示,在奇数行(即,第一行、第三行、第五行……)中,按从左到右的顺序进行标记;而偶数行(即,第二行、第四行、第六行……)中,按从右到左的顺序进行标记思路看上去感觉是数学题直接找公式,贴一下题解:https://leetcode-cn.com/problems/path-in-zigzag-labelled-binary-tree/solution/er-cha-shu-xun-lu-by-lee原创 2021-07-29 21:41:40 · 165 阅读 · 0 评论 -
863. 二叉树中所有距离为 K 的结点(java
题目给定一个二叉树(具有根结点 root), 一个目标结点 target ,和一个整数值 K 。返回到目标结点 target 距离为 K 的所有结点的值的列表。 答案可以以任何顺序返回。思路哈希表存储节点的父节点通过dfs查找深度为k的节点代码/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode rig原创 2021-07-28 11:55:20 · 148 阅读 · 0 评论 -
671. 二叉树中第二小的节点(java
题目给定一个非空特殊的二叉树,每个节点都是正数,并且每个节点的子节点数量只能为 2 或 0。如果一个节点有两个子节点的话,那么该节点的值等于两个子节点中较小的一个。更正式地说,root.val = min(root.left.val, root.right.val) 总成立。给出这样的一个二叉树,你需要输出所有节点中的第二小的值。如果第二小的值不存在的话,输出 -1 。思路思路:通过dfs 找出大于rootvalue的最小值,即为所有节点中第二小的值ans初始化为-1,用于存放比根节点大的最小值原创 2021-07-28 10:36:42 · 112 阅读 · 0 评论 -
1713. 得到子序列的最少操作次数(java)
题目给你一个数组 target ,包含若干 互不相同 的整数,以及另一个整数数组 arr ,arr 可能 包含重复元素。每一次操作中,你可以在 arr 的任意位置插入任一整数。比方说,如果 arr = [1,4,1,2] ,那么你可以在中间添加 3 得到 [1,4,3,1,2] 。你可以在数组最开始或最后面添加整数。请你返回 最少 操作次数,使得 target 成为 arr 的一个子序列。一个数组的 子序列 指的是删除原数组的某些元素(可能一个元素都不删除),同时不改变其余元素的相对顺序得到的数组。原创 2021-07-26 23:58:26 · 406 阅读 · 1 评论 -
1743. 从相邻元素对还原数组(java)
题目存在一个由 n 个不同元素组成的整数数组 nums ,但你已经记不清具体内容。好在你还记得 nums 中的每一对相邻元素。给你一个二维整数数组 adjacentPairs ,大小为 n - 1 ,其中每个 adjacentPairs[i] = [ui, vi] 表示元素 ui 和 vi 在 nums 中相邻。题目数据保证所有由元素 nums[i] 和 nums[i+1] 组成的相邻元素对都存在于 adjacentPairs 中,存在形式可能是 [nums[i], nums[i+1]] ,也可能是原创 2021-07-26 12:28:24 · 179 阅读 · 0 评论 -
1893. 检查是否区域内所有整数都被覆盖
题目给你一个二维整数数组 ranges 和两个整数 left 和 right 。每个 ranges[i] = [starti, endi] 表示一个从 starti 到 endi 的 闭区间 。如果闭区间 [left, right] 内每个整数都被 ranges 中 至少一个 区间覆盖,那么请你返回 true ,否则返回 false 。已知区间 ranges[i] = [starti, endi] ,如果整数 x 满足 starti <= x <= endi ,那么我们称整数x 被覆盖了。原创 2021-07-23 19:58:55 · 316 阅读 · 0 评论 -
数组74.搜索二维数组(java)
题目编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值。该矩阵具有如下特性:每行中的整数从左到右按升序排列。每行的第一个整数大于前一行的最后一个整数。思路两个任务:1.判断有没有target2.判断矩阵是否符合条件通过一个二重循环实现。用1个prio变量记录每一行中前一个变量的值,进行比较,切换行时修改值为当前行的第一个值。代码class Solution { public boolean searchMatrix(int[][] matrix, int tar原创 2021-03-30 22:35:15 · 138 阅读 · 0 评论 -
栈 341 扁平化嵌套列表迭代器(java)
题目给你一个嵌套的整型列表。请你设计一个迭代器,使其能够遍历这个整型列表中的所有整数。列表中的每一项或者为一个整数,或者是另一个列表。其中列表的元素也可能是整数或是其他列表。思路dfs知识点:迭代器Iterator、List操作代码public class NestedIterator implements Iterator<Integer> { private List<Integer> vals; private Iterator<Integ原创 2021-03-30 22:30:41 · 131 阅读 · 0 评论 -
leetcode 227. 基本计算器 II (java)
题目给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值。整数除法仅保留整数部分。思路把字符串分为数字和符号,分别设置数字栈和符号栈用于存放数据,乘除的优先级比加减高,符号栈用一个变量sign表示,只需要存放上一个符号存在大于10的实数,所以需要对连续数字进行移位相加class Solution { public int calculate(String s) { //数字+符号 先乘除后加减 需要数据栈与符号栈 int re原创 2021-03-12 09:21:19 · 177 阅读 · 0 评论 -
栈94. 二叉树的中序遍历(java)
题目给定一个二叉树的根节点 root ,返回它的 中序 遍历。中序:左中右例子:思路迭代:用栈模拟,每次遍历到最左,一边遍历一边压栈,到达尽头后pop,然后继续。class Solution { public List<Integer> inorderTraversal(TreeNode root) { List<Integer> ans = new ArrayList<>(); Deque<TreeN原创 2021-03-01 22:22:28 · 336 阅读 · 0 评论 -
数组/DP 303. 区域和检索 - 数组不可变(java)
题目给定一个整数数组 nums,求出数组从索引 i 到 j(i ≤ j)范围内元素的总和,包含 i、j 两点。实现 NumArray 类:NumArray(int[] nums) 使用数组 nums 初始化对象int sumRange(int i, int j) 返回数组 nums 从索引 i 到 j(i ≤ j)范围内元素的总和,包含 i、j 两点(也就是 sum(nums[i], nums[i + 1], … , nums[j]))例子思路妹想很复杂,就来个对象属性,直接把输入赋予给这原创 2021-03-01 21:56:46 · 148 阅读 · 0 评论 -
栈1021. 删除最外层的括号(java)
题目有效括号字符串为空 ("")、"(" + A + “)” 或 A + B,其中 A 和 B 都是有效的括号字符串,+ 代表字符串的连接。例如,"","()","(())()" 和 “(()(()))” 都是有效的括号字符串。如果有效字符串 S 非空,且不存在将其拆分为 S = A+B 的方法,我们称其为原语(primitive),其中 A 和 B 都是非空有效括号字符串。给出一个非空有效字符串 S,考虑将其进行原语化分解,使得:S = P_1 + P_2 + … + P_k,其中 P_i 是有效括原创 2021-02-28 20:16:07 · 220 阅读 · 0 评论 -
896. 单调数列(java)
题目如果数组是单调递增或单调递减的,那么它是单调的。如果对于所有 i <= j,A[i] <= A[j],那么数组 A 是单调递增的。 如果对于所有 i <= j,A[i]> = A[j],那么数组 A 是单调递减的。当给定的数组 A 是单调数组时返回 true,否则返回 false。思路一开始是想一次遍历,先根据前面几项判断数列是递增还是递减,然后如果遍历过程中顺序变化就返回false,否则返回true。用flag来表示数列的顺序,1为增,0为减,2为相等。需要考虑一原创 2021-02-28 19:30:55 · 576 阅读 · 0 评论 -
867. 转置矩阵(java)
题目给你一个二维整数数组 matrix, 返回 matrix 的 转置矩阵 。矩阵的 转置 是指将矩阵的主对角线翻转,交换矩阵的行索引与列索引。思路1 不一定是方阵,不能原地修改。 2 需要对矩阵进行遍历。class Solution { public int[][] transpose(int[][] matrix) { int row = matrix.length; int col = matrix[0].length; int i原创 2021-02-25 09:52:43 · 172 阅读 · 0 评论 -
(leetcode)832 翻转图像(java)
题目给定一个二进制矩阵 A,我们想先水平翻转图像,然后反转图像并返回结果。水平翻转图片就是将图片的每一行都进行翻转,即逆序。例如,水平翻转 [1, 1, 0] 的结果是 [0, 1, 1]。反转图片的意思是图片中的 0 全部被 1 替换, 1 全部被 0 替换。例如,反转 [0, 1, 1] 的结果是 [1, 0, 0]。思路思路:遍历矩阵,交换的同时反转。交换:头尾交换,只需要遍历到每一行的一半,注意当矩阵的行列数为偶数和奇数时有一定差别。反转:两种方法。第一是三元表达式a==0?1:0(原创 2021-02-24 22:44:51 · 124 阅读 · 0 评论 -
(leetcode)701.二叉搜索树中的插入操作
给定二叉搜索树(BST)的根节点和要插入树中的值,将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 输入数据保证,新值和原始二叉搜索树中的任意节点值都不同。注意,可能存在多种有效的插入方式,只要树在插入后仍保持为二叉搜索树即可。 你可以返回任意有效的结果。例如:给定二叉搜索树: 4 / \ 2 7 / \ 1 3和 插入的值: 5你可以返回这个二叉搜索树: 4 / \ 2原创 2020-10-01 22:40:22 · 107 阅读 · 0 评论 -
(leetcode)617.合并二叉树
给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL 的节点将直接作为新二叉树的节点。示例 1:输入: Tree 1 Tree 2 1 2原创 2020-09-23 13:35:10 · 118 阅读 · 1 评论 -
(leetcode)78.子集
给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。示例:输入: nums = [1,2,3]输出:[ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], []]代码:方法1class Solution {List<List<Integer>> ans = new ArrayList<>(); public List&原创 2020-09-20 15:55:44 · 159 阅读 · 0 评论 -
剑指 Offer 30. 包含min函数的栈
原题:https://leetcode-cn.com/problems/bao-han-minhan-shu-de-zhan-lcof/定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。示例:MinStack minStack = new MinStack();minStack.push(-2);minStack.push(0);minStack.push(-3);minStack.min();原创 2020-09-19 20:59:34 · 119 阅读 · 0 评论 -
(leetcode)404. 左叶子之和
919的每日一题。计算给定二叉树的所有左叶子之和。示例: 3 / \ 9 20 / \ 15 7在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24看清题意,刚开始还把左叶子想成了左节点。代码:/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode原创 2020-09-19 20:15:23 · 116 阅读 · 0 评论 -
(leetcode)面试题 03.04. 化栈为队
题目:https://leetcode-cn.com/problems/implement-queue-using-stacks-lcci/实现一个MyQueue类,该类用两个栈来实现一个队列。 MyQueue queue = new MyQueue(); queue.push(1); queue.push(2); queue.peek(); // 返回 1 queue.pop(); // 返回 1 queue.empty(); // 返回 false说明:你只能使用标准的栈原创 2020-09-19 10:09:11 · 155 阅读 · 0 评论 -
(leetcode)47. 全排列 II
给定一个可包含重复数字的序列,返回所有不重复的全排列。示例: 输入: [1,1,2] 输出: [ [1,1,2], [1,2,1], [2,1,1] ]class Solution { boolean[] vis; public List<List<Integer>> permuteUnique(int[] nums) { List<List<Integer>> ans = new Arra原创 2020-09-19 09:34:46 · 125 阅读 · 0 评论 -
剑指 Offer 09. 用两个栈实现队列
https://leetcode-cn.com/problems/yong-liang-ge-zhan-shi-xian-dui-lie-lcof/要求:用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )示例 1:输入:[“CQueue”,“appendTail”,“deleteHead”,“deleteHead”][[],[3原创 2020-09-17 20:48:28 · 128 阅读 · 0 评论