自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(90)
  • 收藏
  • 关注

原创 有多少小于当前数字的数,leetcode习题

leetcode习题

2022-07-02 23:03:25 147 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 161

原创 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 346

原创 找到所有数组中消失的数字,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 345

原创 盛最多的水容器,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 68

原创 长度最小的子数组(滑动窗口版)

长度最小的子数组(滑动窗口版)给定一个含有 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 79

原创 不同路径 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 54

原创 爬楼梯,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 307

原创 如何提高链表的查询效率

使用跳表1.链表的变形:跳表。跳表是一种我们不常见的数据结构,但由于其优秀的特性,在工业中,常常被用来代替红黑树,进行查找,插入和删除。Redis的有序集合就是用跳表来实现的。跳表本质上是采用"二分"的思路来改造链表,所以这要求链表必须是有序的。对于传统的链表,即使,其是有序的,查找起来也需要O(n)的时间复杂度。所以,我们在链表增加索引,如下图所示:通过这种方式,当我们在查询6的时候,我们先通过索引,定位6在5之后,再通过指针,指向原始链表,得到6。通过这种方式,查找到6需要5步,原始需要6步。

2022-02-09 14:55:35 3710

原创 做Java项目的坑点

maven的模块间的合并,注意打包顺序java jdk的版本控制更个框架的之间版本之间的控制依赖导入是否有效以前本人亲测!!!!!!!!!!后续会继续更新

2022-02-06 22:23:43 1164

原创 无重叠区间,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 577

原创 用少量箭射爆气球,leetcode习题

用少量气球射爆气球在二维空间中有许多球形的气球。对于每个气球,提供的输入是水平方向上,气球直径的开始和结束坐标。由于它是水平的,所以纵坐标并不重要,因此只要知道开始和结束的横坐标就足够了。开始坐标总是小于结束坐标。一支弓箭可以沿着 x 轴从不同点完全垂直地射出。在坐标 x 处射出一支箭,若有一个气球的直径的开始和结束坐标为 xstart,xend, 且满足 xstart ≤ x ≤ xend,则该气球会被引爆。可以射出的弓箭的数量没有限制。 弓箭一旦被射出之后,可以无限地前进。我们想找到使得所有气球

2022-02-03 14:54:04 91

原创 柠檬水找零,leetcode习题

柠檬水找零在柠檬水摊上,每一杯柠檬水的售价为 5 美元。顾客排队购买你的产品,(按账单 bills 支付的顺序)一次购买一杯。每位顾客只买一杯柠檬水,然后向你付 5 美元、10 美元或 20 美元。你必须给每个顾客正确找零,也就是说净交易是每位顾客向你支付 5 美元。注意,一开始你手头没有任何零钱。给你一个整数数组 bills ,其中 bills[i] 是第 i 位顾客付的账。如果你能给每位顾客正确找零,返回 true ,否则返回 false 。 示例 1:输入:bills = [

2022-02-01 16:09:39 67

原创 加油站,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 75

原创 跳跃游戏 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 58

原创 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 557

原创 跳跃游戏,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 86

原创 最大子序和(贪心),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 119

原创 摆动序列(贪心),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 54

原创 全排列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 270

原创 全排列(回溯),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 58

原创 子集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 71

原创 子集问题(回溯),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 100

原创 复原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 174

原创 分割回文字符串(回溯),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 109

原创 组合总和(回溯),leetcode习题

组合总和给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的 所有不同组合 ,并以列表形式返回。你可以按 任意顺序 返回这些组合。candidates 中的 同一个 数字可以 无限制重复被选取 。如果至少一个数字的被选数量不同,则两种组合是不同的。 对于给定的输入,保证和为 target 的不同组合数少于 150 个。示例 1:输入:candidates = [2,3,6,7], target

2022-01-07 00:15:35 49

原创 电话号码的字母组合,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 214

原创 组合总和(回溯),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 3002

原创 组合(回溯),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 244

原创 将有序数组转换为二叉搜索树,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 65

原创 为什么重写equals()方法,一定要重写hashcode呢

重写equals,不重写hashcode()其实这里,要涉及到equals,和hashcode方法,常常使用在hashmap,插入和查询的时候,假如只重写equals的话,在插入时,将key进行hash后,如果map中已经存在了插入的key的hash值,那么会调用equals比较key的具体值,但是没有重写hashcode的值那么会造成,其实插入的key是相同的,但是因为hachcode不同被再次插入一次不重写equals,重写hashcode()重写hashcode,虽然插入相同的key时ha

2021-12-16 14:10:22 800

原创 合并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 58

原创 Java值传递和引用传递

值传递与引用传递1.对基本类型的数据进行操作:由于原始内容和副本都是存储实际值,并且是在不同的栈区,因此形参的操作,不影响原始内容。2.对引用类型的数据进行操作,分两种情况:一种是形参和实参保持指向同一个对象地址,则形参的操作,会影响实参指向的对象的内容。(深拷贝)一种是形参被改动指向新的对象地址(如重新赋值引用),则形参的操作,不会影响实参指向的对象的内容。值传递:在方法被调用时,实参通过形参把它的内容副本传入方法内部,此时形参接收到的内容是实参值的一个拷贝,因此在方法内对形参的任何操作,都

2021-12-14 19:54:11 90

原创 二叉搜索树的插入操作,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 67

原创 java对list进行排序,java对map进行排序(比较器)

java对list进行排序使用Colletions.sort方法import java.util.*;public class Main {public static void main(String[] args) {List listStu = new ArrayList<>();listStu.add(new Student(98));listStu.add(new Student(50));listStu.add(new Student(70));listStu.add

2021-12-12 14:50:55 2336

原创 二叉搜索树的最小绝对差,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 319

原创 合并两个有序数组

合并两个有序数组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 606

原创 验证二叉搜索树,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 147

原创 TCP三次握手和四次挥手的理解

TCP的三次握手与四次挥手理解序列号seq:占4个字节,用来标记数据段的顺序,TCP把连接中发送的所有数据字节都编上一个序号,第一个字节的编号由本地随机产生;给字节编上序号后,就给每一个报文段指派一个序号;序列号seq就是这个报文段中的第一个字节的数据编号。确认号ack:占4个字节,期待收到对方下一个报文段的第一个数据字节的序号;序列号表示报文段携带数据的第一个字节的编号;而确认号指的是期望接收到下一个字节的编号;因此当前报文段最后一个字节的编号+1即为确认号。确认ACK:占1位,仅当ACK=1时

2021-12-07 11:08:41 88

原创 二叉搜索树中的搜索,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 84

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除