自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Java8新特性 Stream流(可快速上手)

Stream流是Java8中引入的一个Stream类,用来简化对数组和集合的操作。

2022-09-13 20:47:09 289 1

原创 java实现字符串四舍五入取X位小数

public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); double num = 6.6738335; String res = String.format("%.6f", num); double res1 = Double.parseDouble(res); System.out

2021-08-15 23:02:23 141

原创 acm模式链表输入输出处理(java)

public static void main(String[] args) { Scanner in = new Scanner(System.in); while(in.hasNext()){ String str = in.nextLine(); int k = in.nextInt(); ListNode head = new ListNode(-1); ListNode.

2021-07-31 01:41:02 1209

原创 位运算及例题

背景位:计算机底层使用的是二进制,0和1,就是位。字节:相当于将位打包,一字节等于8位。位运算符&与 同时为1计算为1|或 只要一个为1计算为1^异或 只有一个为1计算为1<< >>左移右移例题int fun1(int i) { return i < 2 ? i : fun1(i - 1) + fun1(i - 2); /*f0=0 f1=1 f2=1 f3=2 f4=3 f5=5 f6=8 f7=13 f8=21 f9=34 f10=

2021-07-30 17:09:16 195

原创 402. 移掉 K 位数字----单调栈(java)

402. 移掉 K 位数字难度中等605给你一个以字符串表示的非负整数 num 和一个整数 k ,移除这个数中的 k 位数字,使得剩下的数字最小。请你以字符串形式返回这个最小的数字。示例 1 :输入:num = "1432219", k = 3输出:"1219"解释:移除掉三个数字 4, 3, 和 2 形成一个新的最小的数字 1219 。示例 2 :输入:num = "10200", k = 1输出:"200"解释:移掉首位的 1 剩下的数字为 200. 注意输出不能有任何前导零。

2021-07-29 23:42:40 373

原创 单调栈的保姆式教学(java)

739. 每日温度难度中等827请根据每日 气温 列表 temperatures ,请计算在每一天需要等几天才会有更高的温度。如果气温在这之后都不会升高,请在该位置用 0 来代替。示例 1:输入: temperatures = [73,74,75,71,69,72,76,73]输出: [1,1,4,2,1,1,0,0]示例 2:输入: temperatures = [30,40,50,60]输出: [1,1,1,0]示例 3:输入: temperatures = [30,60,9..

2021-07-29 23:27:27 88

原创 560. 和为K的子数组(java实现)

560. 和为K的子数组难度中等1015给定一个整数数组和一个整数 **k,**你需要找到该数组中和为 k 的连续的子数组的个数。示例 1 :输入:nums = [1,1,1], k = 2输出: 2 , [1,1] 与 [1,1] 为两种不同的情况。说明 :数组的长度为 [1, 20,000]。数组中元素的范围是 [-1000, 1000] ,且整数 k 的范围是 [-1e7, 1e7]。//前缀和代表前i个class Solution { public int suba

2021-07-29 22:16:24 227

原创 滑动窗口,看这篇就够了(java)

解决问题一般用来求子串,子数组。思考步骤1.首先对题意进行分析,得出窗口的定义(比如子串的每个字符存在个数/子数组的和)2.开始创建变量2.1.window(HashMap/int)用来定义窗口。2.2.left right指针[left, right)区间就是我们的窗口。2.3结果res,需根据题意3.window更新窗口值后,right++。到达窗口收缩条件,更新结果(如果满足题),window更新窗口值,left–细节处理如果一直满足题意,窗口收缩时不满足题意,窗口收缩时不能更新结

2021-07-29 01:52:07 2526 1

原创 关于bfs的总结

思路:使用LinkedList()创建队列存放节点,队列先加入一个根节点,进入循环,每次先得出本层元素个数,进入下一个将本层节点遍历从队列删除的循环,每删除一个节点,添加他的左子右子节点,为下一层的遍历做铺垫。总结:初始化一个根节点加入队列后,对每层遍历,删除该层每个节点,加入下一层所有节点,直到队列删除所有节点。...

2021-07-27 22:34:32 64

原创 LinkedList常用方法(精炼易懂)

LinkedList底层是一个链表添加方法:add(E e) 链表尾部添加元素删除方法:remove() 链表头部删除元素remove(E e)删除指定位置元素查询:get(int index) 查询指定索引getFirst() 链表头getLast() 链表尾

2021-07-27 22:22:15 99

原创 Comparator接口和Arrays.sort()方法的排序(java)

Arrays.sort()默认升序排序当需要其他排序方式时使用Comparator的匿名类,重写compare方法举例降序排序Integer[] nums = new Integer[100];Arrays.sort(nums, new Comparator<Integer>(){ public int compare(Integer o1, Integer o2){ return (int) o2 - o1; }})return 为正(o2 > o1)就让o2排在前

2021-07-27 17:47:14 525

原创 HashSet遍历(java)

举例如下:int index = 0;int[] res = new int[100];Set<Integer> set = new HashSet<>();for(int num : set) { res[i] = num;}Set特点:无序,不可重复,用来去重很不错。

2021-07-27 16:53:59 369

原创 47. 全排列 II----回溯升级剪枝,很经典可以举一反三(java)

47. 全排列 II难度中等754给定一个可包含重复数字的序列 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]]class Solution { List<List<Integer>> res = n

2021-07-27 04:19:37 294

原创 有关回溯算法(java)

思考:已经做的选择LIst path,boolean[] used还可以做的选择。(重点)还可以做的选择一般用for循环里的索引控制i = start注意:剪枝操作,需要排序后进行。使用boolean数组用来记录某节点上层已选择记为true。到达叶子节点return。...

2021-07-27 04:18:25 139

原创 String为空字符串和null的判断

String s1 = “” 和String s2 == null如果要判断s1为空字符串s1.length() == 0/s1.equals("")如果要判断s2为nulls2 ==null

2021-07-25 15:46:59 173

原创 java的String类trim方法

public String trim()返回去掉首尾空格的字符串

2021-07-25 15:07:35 255 4

原创 关于乐观锁和悲观锁(让你成为大聪明)

一、背景知识锁的作用:多个线程并发操作同一数据,保证数据的准确性。也就是说,多线程情况下,每个线程的执行结果和单线程时相同。下面要说的乐观锁、悲观锁都是一种概念,并不是具体实现。二、乐观锁概念:线程读取数据时并不会上锁,但会保留当前数据的值为原有值,之后在进行修改前用原有值和现在的值进行对比,如果相同可以修改。使用场景:读操作较多,写操作较少。实现:CAS操作CAS中文是比较并替换,使用三个基本操作数,内存地址V,预期值A,修改值B。线程先去内存地址读取数据作为预期值,在回来修改数据前。先比

2021-07-25 01:55:37 146

原创 ArrayList和LinkedList相同点、不同点(通俗易懂)

一、相同点都是线程不安全的集合。二、不同点1.底层数据结构:ArrayList使用的是动态数组,LinkedList使用的是双向循环链表。2.增加和删除元素(add\remove):LinkedList效率更高,时间复杂度O(1),ArrayList效率较低,时间复杂度近似O(N)。原因是从中间增加和删除元素会移动后面的所有元素向前或向后。3.修改和查找元素(set/get):ArrayList效率更高,根据索引直接找到内存地址可以快速随机访问,LinkedList效率较低,需要从一端根据指针依次

2021-07-24 23:04:26 930

原创 死锁(多线程并发java)

一、死锁概念多个线程争夺资源,全部无法执行,进入一种僵局。二、死锁产生的四个必要条件1.互斥条件:资源被线程占用后,其他线程无法占用。2.请求和保持条件:一个线程因请求资源堵塞时,保持自己的资源。3.不剥夺条件:一个线程获得的资源不能被剥夺,只能主动释放。4.环路等待条件:线程之间形成一种等待资源的循环。三、实现一个死锁四、如何解决死锁破坏产生死锁的四个条件1.破坏互斥条件:无法破坏,锁本身就是互斥的。2.破坏请求与保持条件:一次申请所有资源,避免请求。3.破坏不剥夺条件:线程在占有

2021-07-24 02:03:32 84

原创 垃圾回收算法整理(清晰明了,你一定能懂)

一、标记/清除算法描述:当内存耗尽,程序停止,开启GC线程,标记GCRoots可达的对象,清除所有未标记的对象。缺点:1.内存空间不连续。2.效率较低,GC线程执行时,程序停止。额外:程序停止原因:如果程序与GC线程同时执行,会有一些新建的对象没有别标记导致错误清除。二、复制算法描述:将内存分为两块,活动区域和空闲区域,每次使用活动区域。当内存耗尽,程序停止,开启GC线程,将活动区域的对象复制到空闲区域且内存地址连续排列。优点:内存空间整齐。缺点:1.浪费了一半的内存。2.当存活对象较多时,大

2021-07-23 23:42:48 608

原创 leetcode 7. 整数反转----数字计算越界提前判断(java)

7. 整数反转难度简单2938给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。假设环境不允许存储 64 位整数(有符号或无符号)。示例 1:输入:x = 123输出:321示例 2:输入:x = -123输出:-321示例 3:输入:x = 120输出:21示例 4:输入:x = 0输出:0class Solution { //[-214

2021-07-22 17:35:18 163

原创 leetcode 125. 验证回文串----左右指针解决(java)

125. 验证回文串难度简单398给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。**说明:**本题中,我们将空字符串定义为有效的回文串。示例 1:输入: "A man, a plan, a canal: Panama"输出: true解释:"amanaplanacanalpanama" 是回文串示例 2:输入: "race a car"输出: false解释:"raceacar" 不是回文串class Solution { //左右指针

2021-07-22 16:46:43 60

原创 leetcode 122. 买卖股票的最佳时机 II----贪心每次取最优(java)

122. 买卖股票的最佳时机 II难度简单1284给定一个数组 prices ,其中 prices[i] 是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。**注意:**你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例 1:输入: prices = [7,1,5,3,6,4]输出: 7解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润

2021-07-22 01:29:30 175

原创 leetcode 152. 乘积最大子数组----动态规划两个dp(java)

152. 乘积最大子数组难度中等1194给你一个整数数组 nums ,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。示例 1:输入: [2,3,-2,4]输出: 6解释: 子数组 [2,3] 有最大乘积 6。示例 2:输入: [-2,0,-1]输出: 0解释: 结果不能为 2, 因为 [-2,-1] 不是子数组。class Solution { //状态:dpMax[i]以nums[i]结尾的乘积最大子数组乘积 dpMin[i

2021-07-22 01:26:27 75

原创 leetcode 70. 爬楼梯--一套连招直接抬走(java语言)

爬楼梯假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。示例 1:输入: 2输出: 2解释: 有两种方法可以爬到楼顶。1 阶 + 1 阶2 阶示例 2:输入: 3输出: 3解释: 有三种方法可以爬到楼顶。3. 1 阶 + 1 阶 + 1 阶4. 1 阶 + 2 阶5. 2 阶 + 1 阶class Solution {//原问题:爬上n个台阶的方法数//子问题:.

2021-07-21 17:14:25 42

原创 leetcode 198. 打家劫舍 --终结版

打家劫舍你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。示例 1:输入:[1,2,3,1]输出:4解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。偷窃到的最高金额 = 1 + 3 = 4 。示例 2:输入:[2.

2021-07-21 16:58:01 46

原创 动态规划总结

一般出现:计数、最大/最小/最长、是否存在一般可以用动态规划解决。只问最优解,不问具体的解;动态规划问题的思路总结:1.通过原问题,得出子问题dp[i]/dp[i][j],是参数化的,给出定义。2.研究最优策略的最后一步,得出子问题和更小的子问题之间联系,写出表达式。3.考虑最基本情况,保证表达式中参数不为空,进行初始化(i == 0/j == 0)。判断i-1, j -1 是否合法,初始化dp[i][j] 的定义不是 text1[0:i] 和 text2[0:j] ,是为了方便当 i = 0 或

2021-07-21 02:04:21 42

原创 leetcode 59. 螺旋矩阵 II ----技巧题(java实现)

59. 螺旋矩阵 II难度中等448给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。示例 1:输入:n = 3输出:[[1,2,3],[8,9,4],[7,6,5]]示例 2:输入:n = 1输出:[[1]]class Solution { public int[][] generateMatrix(int n) { int[][] res = new int[n][n];

2021-07-20 23:01:38 94

原创 leetcode 240. 搜索二维矩阵 II ----二分法变种(java实现)

240. 搜索二维矩阵 II难度中等670编写一个高效的算法来搜索 *m* x *n* 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性:每行的元素从左到右升序排列。每列的元素从上到下升序排列。示例 1:输入:matrix = [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,13,14,17,24],[18,21,23,26,30]], target = 5输出:true示例 2:输入:matrix = [[1,

2021-07-20 15:48:42 82

原创 剑指 Offer 36. 二叉搜索树与双向链表----中序遍历轻松解决(java语言)

剑指 Offer 36. 二叉搜索树与双向链表难度中等275输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表。要求不能创建任何新的节点,只能调整树中节点指针的指向。为了让您更好地理解问题,以下面的二叉搜索树为例:我们希望将这个二叉搜索树转化为双向循环链表。链表中的每个节点都有一个前驱和后继指针。对于双向循环链表,第一个节点的前驱是最后一个节点,最后一个节点的后继是第一个节点。下图展示了上面的二叉搜索树转化成的链表。“head” 表示指向链表中有最小元素的节点。特别地,我们希望可

2021-07-20 14:47:42 53

原创 Scanner类

next():只读取输入直到空格/回车nextLine():读取直到回车

2021-07-18 23:10:00 41

原创 StringBuilder类常用方法

1.append(String s/char c)连接字符串/字符2.toString()转为字符串

2021-07-18 20:12:02 57

原创 leetcode 695岛屿的最大面积(dfs java实现经典)

695. 岛屿的最大面积难度中等510给定一个包含了一些 0 和 1 的非空二维数组 grid 。一个 岛屿 是由一些相邻的 1 (代表土地) 构成的组合,这里的「相邻」要求两个 1 必须在水平或者竖直方向上相邻。你可以假设 grid 的四个边缘都被 0(代表水)包围着。找到给定的二维数组中最大的岛屿面积。(如果没有岛屿,则返回面积为 0 。)示例 1:[[0,0,1,0,0,0,0,1,0,0,0,0,0], [0,0,0,0,0,0,0,1,1,1,0,0,0], [0,1,1,0,1,

2021-07-18 19:37:43 79

原创 leetcode128最长连续序列(set解决 java语言)

128. 最长连续序列难度中等833给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。请你设计并实现时间复杂度为 O(n) 的算法解决此问题。示例 1:输入:nums = [100,4,200,1,3,2]输出:4解释:最长数字连续序列是 [1, 2, 3, 4]。它的长度为 4。示例 2:输入:nums = [0,3,7,2,5,8,4,6,0,1]输出:9class Solution { public int longe

2021-07-18 16:40:29 103

原创 leetcode 283移动零(快慢指针实现)

283. 移动零难度简单1128给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。示例:输入: [0,1,0,3,12]输出: [1,3,12,0,0]class Solution { //快慢指针,fast不断移动,当nums[fast] != val, nums[slow] = nums[fast]赋值,slow++,最后[0, slow]是删除了val的数组 public void moveZeroes(int[] nums)

2021-07-18 15:57:40 108

原创 leetcode 43字符串相乘

43. 字符串相乘难度中等675给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。示例 1:输入: num1 = "2", num2 = "3"输出: "6"示例 2:输入: num1 = "123", num2 = "456"输出: "56088"说明:num1 和 num2 的长度小于110。num1 和 num2 只包含数字 0-9。num1 和 num2 均不以零开头,除非是数字 0 本身。

2021-07-18 02:41:27 136

原创 leetcode 14最长公共前缀

14. 最长公共前缀难度简单1693编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 ""。示例 1:输入:strs = ["flower","flow","flight"]输出:"fl"示例 2:输入:strs = ["dog","racecar","car"]输出:""解释:输入不存在公共前缀。class Solution { //思路:新建res字符串先储存第一个字符串,后面的依次和res对比,将相同的部分赋值给res,如果没有相同的就赋

2021-07-18 00:45:34 86

原创 leetcode 179

179. 最大数难度中等742给定一组非负整数 nums,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。**注意:**输出结果可能非常大,所以你需要返回一个字符串而不是整数。示例 1:输入:nums = [10,2]输出:"210"示例 2:输入:nums = [3,30,34,5,9]输出:"9534330"示例 3:输入:nums = [1]输出:"1"示例 4:输入:nums = [10]输出:"10"class Solution { /

2021-07-18 00:02:26 63

原创 2021-07-17

compare方法return正数 交换,负数不交换,0不变

2021-07-18 00:00:39 43

原创 leetcode 62 64标准dp解决

62. 不同路径难度中等1048一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。问总共有多少条不同的路径?示例 1:输入:m = 3, n = 7输出:28示例 2:输入:m = 3, n = 2输出:3解释:从左上角开始,总共有 3 条路径可以到达右下角。1. 向右 -> 向下 -> 向下2. 向下 -> 向下 -

2021-07-17 19:33:07 134

空空如也

空空如也

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

TA关注的人

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