
力扣算法题
ljn1018
这个作者很懒,什么都没留下…
展开
-
有多少小于当前数字的数,leetcode习题
leetcode习题原创 2022-07-02 23:03:25 · 192 阅读 · 1 评论 -
验证回文串,leetcode习题
验证回文串public boolean isPalindrome(String s) { StringBuilder sb = new StringBuilder(); for (int i=0;i<s.length();i++){ char a = s.charAt(i); if (Character.isLetterOrDigit(a)){//此方法是判断此字符是字符还是数字 s原创 2022-04-12 22:20:57 · 214 阅读 · 0 评论 -
LRU缓存,leetcode习题
LRU缓存public class LRUCache { class DLinkedNode { int key; int value; DLinkedNode prev; DLinkedNode next; public DLinkedNode() {} public DLinkedNode(int _key, int _value) {key = _key; value = _value;}原创 2022-04-09 23:53:19 · 409 阅读 · 0 评论 -
找到所有数组中消失的数字,leetcode习题
找到所有数组中消失的数字(原地寻找)package Leetcode;import java.util.*;/** * @Author li * @Date 4/2/22 11:01 PM * @Version 1.0 * 描述 :找到所有数组中消失的数字 * 名称:FindDisappearedNumbers */public class FindDisappearedNumbers { public List<Integer> findDisappear原创 2022-04-04 23:52:30 · 390 阅读 · 0 评论 -
盛最多的水容器,leetcode习题
盛最多的水容器给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。返回容器可以储存的最大水量。说明:你不能倾斜容器。示例 1:输入:[1,8,6,2,5,4,8,3,7]输出:49 解释:图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。class So原创 2022-03-24 20:31:17 · 88 阅读 · 0 评论 -
长度最小的子数组(滑动窗口版)
长度最小的子数组(滑动窗口版)给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的 连续 子数组,并返回其长度。如果不存在符合条件的子数组,返回 0。示例:输入:s = 7, nums = [2,3,1,2,4,3] 输出:2 解释:子数组 [4,3] 是该条件下的长度最小的子数组。public int minSubArrayLen(int s, int[] nums) { int left = 0; //初始位置 int sum原创 2022-03-22 12:17:09 · 103 阅读 · 0 评论 -
不同路径 II,leetcode习题
#不同路径 II一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish”)。现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?网格中的障碍物和空位置分别用 1 和 0 来表示。输入:obstacleGrid = [[0,0,0],[0,1,0],[0,0,0]]输出:2解释:3x3 网格的正中间有一个障碍物。从左上角到右下角一共有原创 2022-02-14 21:19:05 · 79 阅读 · 0 评论 -
爬楼梯,leetcode习题
爬楼梯假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?示例 1:输入:n = 2输出:2解释:有两种方法可以爬到楼顶。1. 1 阶 + 1 阶2. 2 阶示例 2:输入:n = 3输出:3解释:有三种方法可以爬到楼顶。1. 1 阶 + 1 阶 + 1 阶2. 1 阶 + 2 阶3. 2 阶 + 1 阶class Solution { public int climbStairs(int n) {原创 2022-02-12 21:10:53 · 334 阅读 · 0 评论 -
无重叠区间,leetcode习题
无重叠区间给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠。注意:可以认为区间的终点总是大于它的起点。区间 [1,2] 和 [2,3] 的边界相互“接触”,但没有相互重叠。示例 1:输入: [ [1,2], [2,3], [3,4], [1,3] ]输出: 1解释: 移除 [1,3] 后,剩下的区间没有重叠。示例 2:输入: [ [1,2], [1,2], [1,2] ]输出: 2解释: 你需要移除两个 [1,2] 来使剩下的区间没有重叠。示例 3原创 2022-02-05 22:00:19 · 596 阅读 · 0 评论 -
用少量箭射爆气球,leetcode习题
用少量气球射爆气球在二维空间中有许多球形的气球。对于每个气球,提供的输入是水平方向上,气球直径的开始和结束坐标。由于它是水平的,所以纵坐标并不重要,因此只要知道开始和结束的横坐标就足够了。开始坐标总是小于结束坐标。一支弓箭可以沿着 x 轴从不同点完全垂直地射出。在坐标 x 处射出一支箭,若有一个气球的直径的开始和结束坐标为 xstart,xend, 且满足 xstart ≤ x ≤ xend,则该气球会被引爆。可以射出的弓箭的数量没有限制。 弓箭一旦被射出之后,可以无限地前进。我们想找到使得所有气球原创 2022-02-03 14:54:04 · 117 阅读 · 0 评论 -
柠檬水找零,leetcode习题
柠檬水找零在柠檬水摊上,每一杯柠檬水的售价为 5 美元。顾客排队购买你的产品,(按账单 bills 支付的顺序)一次购买一杯。每位顾客只买一杯柠檬水,然后向你付 5 美元、10 美元或 20 美元。你必须给每个顾客正确找零,也就是说净交易是每位顾客向你支付 5 美元。注意,一开始你手头没有任何零钱。给你一个整数数组 bills ,其中 bills[i] 是第 i 位顾客付的账。如果你能给每位顾客正确找零,返回 true ,否则返回 false 。 示例 1:输入:bills = [原创 2022-02-01 16:09:39 · 86 阅读 · 0 评论 -
加油站,leetcode习题
加油站在一条环路上有 N 个加油站,其中第 i 个加油站有汽油 gas[i] 升。你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。如果你可以绕环路行驶一周,则返回出发时加油站的编号,否则返回 -1。说明: 如果题目有解,该答案即为唯一答案。输入数组均为非空数组,且长度相同。输入数组中的元素均为非负数。示例 1:输入: gas = [1,2,3,4,5]cost = [3,4,原创 2022-02-01 15:20:53 · 101 阅读 · 0 评论 -
跳跃游戏 II(贪心),leetcode习题
跳跃游戏 II给你一个非负整数数组 nums ,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。你的目标是使用最少的跳跃次数到达数组的最后一个位置。假设你总是可以到达数组的最后一个位置。示例 1:输入: nums = [2,3,1,1,4]输出: 2解释: 跳到最后一个位置的最小跳跃数是 2。 从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。示例 2:输入: nums = [2,3,0,1,4]输原创 2022-01-29 21:48:39 · 81 阅读 · 0 评论 -
K次取反后最大化的数组和,leetcode习题
K次取反后最大化的数组和给你一个整数数组 nums 和一个整数 k ,按以下方法修改该数组:选择某个下标 i 并将 nums[i] 替换为 -nums[i] 。重复这个过程恰好 k 次。可以多次选择同一个下标 i 。以这种方式修改数组后,返回数组 可能的最大和 。 示例 1:输入:nums = [4,2,3], k = 1输出:5解释:选择下标 1 ,nums 变为 [4,-2,3] 。示例 2:输入:nums = [3,-1,0,2], k = 3输出:6解释:选择下原创 2022-01-28 22:41:25 · 583 阅读 · 0 评论 -
跳跃游戏,leetcode习题
跳跃游戏给定一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标。 示例 1:输入:nums = [2,3,1,1,4]输出:true解释:可以先跳 1 步,从下标 0 到达下标 1, 然后再从下标 1 跳 3 步到达最后一个下标。示例 2:输入:nums = [3,2,1,0,4]输出:false解释:无论怎样,总会到达下标为 3 的位置。但该下标的最大跳跃长度是 0 , 所以永远原创 2022-01-27 22:27:55 · 113 阅读 · 0 评论 -
最大子序和(贪心),leetcode习题
最大子序和(贪心)给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。子数组 是数组中的一个连续部分。示例 1:输入:nums = [-2,1,-3,4,-1,2,1,-5,4]输出:6解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。示例 2:输入:nums = [1]输出:1示例 3:输入:nums = [5,4,-1,7,8]输出:23class Solution { public int maxSu原创 2022-01-26 21:33:20 · 136 阅读 · 0 评论 -
摆动序列(贪心),leetcode习题
摆动序列(贪心)如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为 摆动序列 。第一个差(如果存在的话)可能是正数或负数。仅有一个元素或者含两个不等元素的序列也视作摆动序列。例如, [1, 7, 4, 9, 2, 5] 是一个 摆动序列 ,因为差值 (6, -3, 5, -7, 3) 是正负交替出现的。相反,[1, 4, 7, 2, 5] 和 [1, 7, 4, 5, 5] 不是摆动序列,第一个序列是因为它的前两个差值都是正数,第二个序列是因为它的最后一个差值为零。子序列 可以通过从原创 2022-01-25 21:51:22 · 72 阅读 · 0 评论 -
全排列II(回溯去重),leetcode习题
全排列II给定一个可包含重复数字的序列 nums ,按任意顺序 返回所有不重复的全排列。 示例 1:输入:nums = [1,1,2]输出:[[1,1,2], [1,2,1], [2,1,1]]示例 2:输入:nums = [1,2,3]输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]] 提示:1 <= nums.length <= 8-10 <= nums[i] <= 10class S原创 2022-01-20 21:39:34 · 292 阅读 · 0 评论 -
全排列(回溯),leetcode习题
全排列给定一个不含重复数字的数组 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]]class Solution { List<List<Integer>> resu原创 2022-01-19 17:19:35 · 84 阅读 · 0 评论 -
子集II(回溯),leetcode习题
子集II给你一个整数数组 nums ,其中可能包含重复元素,请你返回该数组所有可能的子集(幂集)。解集 不能 包含重复的子集。返回的解集中,子集可以按 任意顺序 排列。 示例 1:输入:nums = [1,2,2]输出:[[],[1],[1,2],[1,2,2],[2],[2,2]]示例 2:输入:nums = [0]输出:[[],[0]] class Solution { List<List<Integer>> result = new原创 2022-01-18 17:58:26 · 92 阅读 · 0 评论 -
子集问题(回溯),leetcode习题
子集问题(回溯)给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。 示例 1:输入:nums = [1,2,3]输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]示例 2:输入:nums = [0]输出:[[],[0]]class Solution { List<List<Integer>> result原创 2022-01-17 16:20:09 · 131 阅读 · 0 评论 -
复原IP地址,leetcode习题
复原IP地址有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 '.' 分隔。例如:"0.1.2.201" 和 "192.168.1.1" 是 有效 IP 地址,但是 "0.011.255.245"、"192.168.1.312" 和 "192.168@1.1" 是 无效 IP 地址。给定一个只包含数字的字符串 s ,用以表示一个 IP 地址,返回所有可能的有效 IP 地址,这些地址可以通过在 s 中插入 '.' 来形成。你不能重新排序或删除原创 2022-01-16 10:21:42 · 193 阅读 · 0 评论 -
分割回文字符串(回溯),leetcode习题
分割回文字符串给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是 回文串 。返回 s 所有可能的分割方案。回文串 是正着读和反着读都一样的字符串。示例 1:输入:s = "aab"输出:[["a","a","b"],["aa","b"]]示例 2:输入:s = "a"输出:[["a"]]public class Partition { List<List<String>> result = new ArrayList<>();原创 2022-01-13 17:39:34 · 134 阅读 · 0 评论 -
电话号码的字母组合,leetcode习题
电话号码的字母组合给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。 示例 1:输入:digits = "23"输出:["ad","ae","af","bd","be","bf","cd","ce","cf"]示例 2:输入:digits = ""输出:[]示例 3:输入:digits = "2"输出:["a","b","c"] class Solu原创 2022-01-05 23:27:44 · 234 阅读 · 0 评论 -
组合总和(回溯),leetcode习题
组合总和找出所有相加之和为 n 的 k 个数的组合。组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字。说明:所有数字都是正整数。解集不能包含重复的组合。 示例 1:输入: k = 3, n = 7输出: [[1,2,4]]示例 2:输入: k = 3, n = 9输出: [[1,2,6], [1,3,5], [2,3,4]]class Solution { List<List<Integer>> result = new Arr原创 2022-01-04 22:25:30 · 3074 阅读 · 0 评论 -
组合(回溯),leetcode习题
组合(回溯)给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。你可以按 任何顺序 返回答案。示例 1:输入:n = 4, k = 2输出:[ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4],]示例 2:输入:n = 1, k = 1输出:[[1]] 思路:转化为搜索树!!!public class Combine { List<List<Integer>&g原创 2022-01-02 23:39:07 · 316 阅读 · 0 评论 -
将有序数组转换为二叉搜索树,leetcode习题
将有序数组转换为二叉搜索树给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 高度平衡 二叉搜索树。高度平衡 二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。示例 1:输入:nums = [-10,-3,0,5,9]输出:[0,-3,9,-10,null,5]解释:[0,-10,5,null,-3,null,9] 也将被视为正确答案:示例 2:输入:nums = [1,3]输出:[3,1]解释:[1,3] 和 [3,1] 都是高度原创 2021-12-16 16:28:45 · 88 阅读 · 0 评论 -
合并k个有序链表,leetcode习题
合并k个有序链表给你一个链表数组,每个链表都已经按升序排列。请你将所有链表合并到一个升序链表中,返回合并后的链表。示例 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-12-14 22:20:38 · 84 阅读 · 0 评论 -
二叉搜索树的插入操作,leetcode习题
二叉搜索树的插入操作给定二叉搜索树(BST)的根节点和要插入树中的值,将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 输入数据 保证 ,新值和原始二叉搜索树中的任意节点值都不同。注意,可能存在多种有效的插入方式,只要树在插入后仍保持为二叉搜索树即可。 你可以返回 任意有效的结果 。示例 1:输入:root = [4,2,7,1,3], val = 5输出:[4,2,7,1,3,5]解释:另一个满足题目要求可以通过的树是:示例 2:输入:root = [40,20,60,10,30,原创 2021-12-13 16:01:41 · 90 阅读 · 0 评论 -
二叉搜索树的最小绝对差,leetcode习题
二叉搜索树的最小绝对差给你一个二叉搜索树的根节点 root ,返回 树中任意两不同节点值之间的最小差值 。差值是一个正数,其数值等于两值之差的绝对值。输入:root = [4,2,6,1,3]输出:1输入:root = [1,0,48,null,null,12,49]输出:1 public int getMinimumDifference(TreeNode root){ Stack<TreeNode> stack = new Stack<>();原创 2021-12-11 19:16:21 · 346 阅读 · 0 评论 -
合并两个有序数组
合并两个有序数组public class Merge { public void merge(int[] nums1, int m, int[] nums2, int n){ //定义两个指针 int p1 = 0; int p2 = 0; int cur = 0; //定义一个新的数组,去接收这个排序完的数组 int [] sorted = new int[m+n]; while(p原创 2021-12-10 16:26:25 · 627 阅读 · 0 评论 -
验证二叉搜索树,leetcode习题
验证二叉搜索树public boolean isValidBST(TreeNode root) { if (root == null){ return false; } Stack<TreeNode> stack = new Stack<>(); TreeNode pre = null; while(!stack.isEmpty()||root!=null){原创 2021-12-09 22:55:14 · 167 阅读 · 0 评论 -
二叉搜索树中的搜索,leetcode习题
二叉搜索树中的搜索给定二叉搜索树(BST)的根节点和一个值。 你需要在BST中找到节点值等于给定值的节点。 返回以该节点为根的子树。 如果节点不存在,则返回 NULL。例如,给定二叉搜索树: 4 / \ 2 7 / \1 3和值: 2你应该返回如下子树: 2 / \ 1 3在上述示例中,如果要找的值是 5,但因为没有节点值为 5,我们应该返回 NULL。//迭代法class Solution { public TreeNod原创 2021-12-07 11:02:47 · 104 阅读 · 0 评论 -
合并二叉树,leetcode习题
合并二叉树给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL 的节点将直接作为新二叉树的节点。//迭代法public class MergeTrees { public TreeNode mergeTrees(TreeNode root1, TreeNode root2) { if (root1 == null原创 2021-12-06 22:09:45 · 94 阅读 · 0 评论 -
路径总和,leetcode习题
路径总和//迭代版,层序遍历public class HasPathSum { public boolean hasPathSum(TreeNode root, int sum){ if (root == null ){ return false; } Queue<TreeNode> queuenode = new LinkedList<>();//存储节点的 Queue<原创 2021-12-05 16:54:32 · 189 阅读 · 0 评论 -
找树最左下角的值,leetcode习题
找树最左下角的值给定一个二叉树的 根节点 root,请找出该二叉树的 最底层 最左边 节点的值。假设二叉树中至少有一个节点。示例 1:输入: root = [2,1,3]输出: 1示例 2:输入: [1,2,3,4,null,5,6,null,null,7]输出: 7public class FindBottomLeftValue { public int findBottomLeftValue(TreeNode root) { Deque<TreeNo原创 2021-12-04 22:20:17 · 210 阅读 · 0 评论 -
左叶子节点和,leetcode习题
左叶子节点和class Solution { public int sumOfLeftLeaves(TreeNode root) { if (root == null){ return 0; } //利用辅助栈 Stack<TreeNode> stack = new Stack<>(); stack.push(root); //记录值的和原创 2021-12-03 14:55:45 · 157 阅读 · 0 评论 -
二叉树的所有路径,leetcode习题
二叉树的所有路径public class BinaryTreePaths { public List<String> binaryTreePaths(TreeNode root) { List<String> res = new ArrayList<>(); if (root == null ){ return null; } Stack<Object> st原创 2021-12-02 17:02:04 · 843 阅读 · 0 评论 -
平衡二叉树,leetcode习题
平衡二叉树class Solution { public boolean isBalanced(TreeNode root) { return getHeight(root) != -1; } public int getHeight(TreeNode root){ if (root == null){ return 0; } //计算左子树的高度 int leftHeig原创 2021-12-02 16:16:29 · 747 阅读 · 0 评论 -
完全二叉树的节点个数,leetcode习题
完全二叉树的节点个数public int countNodes(TreeNode root) { if (root == null){return 0;} Queue<TreeNode> queue = new LinkedList<>(); queue.offer(root); int result = 0; while(!queue.isEmpty()){ int siz原创 2021-11-30 23:29:22 · 477 阅读 · 0 评论