自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 动态规划(子序列问题)

动态规划

2022-09-10 16:32:23 348 1

原创 动态规划常见问题(打家劫舍)

动态规划打家劫舍

2022-09-04 22:41:41 266

原创 动态规划(背包常见问题)

动态规划背包问题

2022-09-04 16:14:49 268

原创 回溯常见问题总结

回溯问题一览

2022-08-26 16:40:11 319

原创 二叉树常见问题

二叉搜索树常见刷题

2022-08-25 10:32:21 1484

原创 文档检索(search project)

介绍:日常pc使用或者app使用都会用到的一个常见的功能就是搜索,此项目就是如何实现一个搜索的功能。技术要点:spring boot、mybatis、mysql主要实现的模块包括四个:文档的准备(这里下载了一个文档到本地),构建索引,索引保存,搜索模块。.........

2022-08-10 18:48:15 1424

原创 questionnaire用例测试

项目测试

2022-07-18 19:01:02 362

原创 线程安全02

文章目录1.volatile2.单例模式(1)饿汉模式(2)懒汉模式(3)阻塞队列​1.volatile这个单词的意思是易变的。(1)volatile主要的作用是保护变量的内存可见性问题(90%)内存可见性问题就是有多个线程同时读取同一变量,当其中任意一个线程修改其变量的值时,其他线程都无法及时得到最新值。而被volatile修饰后,将从主内存读取又立即写回主内存。package cn.tan.vola;import java.util.concurrent.TimeUnit;//vo

2022-04-27 17:08:43 94

原创 线程安全的部分知识

package cn.tan.phenomenon;public class Main { // 定义一个共享的数据 —— 静态属性的方式来体现 static int r = 0; // 定义加减的次数 // COUNT 越大,出错的概率越大;COUNT 越小,出错的概率越小 static final int COUNT = 1000_000_00; // 定义两个线程,分别对 r 进行 加法 + 减法操作 static class Add .

2022-04-25 22:21:38 289

原创 线程概念和一些方法

1.**什么是线程**(1)代表一个独立的执行流(2)如何创建并启动一个线程 创建线程 1.继承Thread,重写run方法 2.实现Runnable接口,重写run方法 启动线程 thread.start() 这个方法的作用就是把线程加入到就绪队列中,等待被调度器选中(3)调度具有随机性,所以多线程的程序结果可能是随机的,某些语句的执行顺序可能是随机的。2.**线程中常见的属性** 1.id 进...

2022-04-25 20:39:36 152

原创 程序、进程

1、什么是程序程序等于指令加数据,是处理数据的过程,同时它也是静态的,变现为一个或者一组文件2.什么是进程进程是程序的一次执行的过程,表现为是动态的,一个程序,可以进行多次执行(表现为多个进程),进程是程序在运行阶段的视角主体。站在OS的角度看什么是进程,进程是OS进行资源分配的基本单位,换言之,同一个进程中资源是共享的(如果存在比进程更低级的单位,是共享的);不同进程之间的资源是隔离的。3.一个进程的一生新建(进程处于正在创建中)、就绪(万物具备、只...

2022-04-18 20:07:33 1590

原创 如何解决雨水问题

对于i位置的柱子,它的储水只跟它左边和右边柱子的最大高度有关,更具体一点,左边和右边max柱子高度的较小者决定了i位置加上雨水可以到达什么高度。class Solution { public int trap(int[] height) { int left=0;int right=height.length-1; int res=0; int l_max=0,r_max=0; while(left<right){ ...

2022-04-01 22:31:08 194

原创 Nsum之和全部解决

如果假设输入一个数组 nums 和一个目标和 target,请你返回 nums 中能够凑出 target 的两个元素的值,比如输入 nums = [5,3,1,6], target = 9,那么算法返回两个元素 [3,6]两数之和的核心步骤lo为最左边的元素,hi为最右边的元素有了上面的铺垫就来解决n数之和的问题了,比如一个三数之和你可以穷举一个数字然后调用二数之和,四数之和你可以穷举一个数字然后调用三数之和,那么N数之和呢?总体就是n==2时的时候就用两数之和的解法,然后大的时候递..

2022-03-22 22:12:47 586

原创 283. 移动零-快慢指针

之前发布的文章里有removElement的操作,这里就不具体讲解了,移动零就相当于去除指定值然后再往后面赋值为零就可了class Solution { public void moveZeroes(int[] nums) { int p=removeElement(nums,0); for(int i=p;i<nums.length;i++){ nums[i]=0; } } private int .

2022-03-22 21:26:59 116

原创 27. 移除元素-快慢指针

fast遇到需要去除的元素直接跳过,否则就付给slow对应的位置,并且slow前进一步class Solution { public int removeElement(int[] nums, int val) { if(nums.length==0){ return 0; } int slow=0,fast=0; while(fast<nums.length){ if(num.

2022-03-22 21:12:29 113

原创 26. 删除有序数组中的重复项-快慢指针

快指针先走,并且快指针是一直走的,一直走到最后的 如果快指针元素不等于慢指针元素,慢指针加加后再赋值 此图自以上图片右下角公众号转载,供大家交流学习class Solution { public int removeDuplicates(int[] nums) { if(nums.length==0){ return 0; } int slow=0,fast=0; while(fast..

2022-03-22 21:01:14 161

原创 567. 字符串的排列-滑动窗口

与力扣438题一样甚至更简单class Solution { public boolean checkInclusion(String s1, String s2) { HashMap<Character,Integer> window_map=new HashMap<>(); HashMap<Character,Integer> s1_map=new HashMap<>(); for(int i.

2022-03-22 20:30:59 89

原创 438. 找到字符串中所有字母异位词-滑动窗口

之前说过滑动窗口的套路,这里直接说题解了。题目的意思就是在s中找的p的一些排列,并返回起始索引。直接创建一个滑动窗口哈希表,一个子字符串哈希表 这里的count是用来判断p_map的映射关系的,当某一个字符满足了p_map的需求的时候,count++,对应的代码是 if(window_map.get(c).equals(p_map.get(c))){ count++; } 也是为后面的判断做铺垫 进入后面的whi

2022-03-22 20:24:03 154

原创 力扣76最小覆盖子串-滑动窗口

滑动窗口框架分三步(1)初始化,一般需要map,map记得对每个字符的value初始化为0.(2)向右扩大窗口(3)缩小窗口寻找最优解或者寻找下一组的解题解:(1)进入while循环,去逐个取s中的字符(2)t_map中如果包含这个key的话,就对滑动窗口window_map对应元素的value加1(3)然后再去判断滑动窗口中某个元素的value是否和t_map中的value一致,一致就count++,这里count++代表的是对滑动窗口中映射关系的记录(4)第二个wh...

2022-03-16 21:20:37 120

原创 力扣3无重复的最长子串-滑动窗口

滑动窗口框架分三步(1)初始化,一般需要map,map记得对每个字符的value初始化为0.(2)向右扩大窗口(3)缩小窗口寻找最优解或者寻找下一组的解题解:无重复表示每一个key的value为11.进入while循环,对每一个字符串s中存在key的value加一2.第二个while循环条件如果一个映射关系中value的值大于1了,说明有重复的字符了,就要通过left指针缩小窗口3.然后记得不断地比较right-left,就是子串长度的大小class Solution

2022-03-16 21:04:49 145

原创 七种排序的小结

1.堆排序(1)堆排序首先要建一个堆(2)以大堆为例,只有根节点是最大的,根节点和最后一个元素交换(3)交换之后树发生了变化,调用向下调整的方法package cn.tan.allKindsOfSort;import java.util.Arrays;public class HeapSort { private static void swap(long[] arr,int i,int j){ long t=arr[i]; arr[i].

2022-03-16 20:47:16 369

原创 优先队列-堆

package cn.tan.heap;import java.lang.reflect.Array;import java.util.Arrays;//优先队列默认小堆public class MyPriorityQueue { private long[] arr; private int size; public int size(){ return size; } public boolean isEmpty(){ .

2022-03-15 16:12:43 332

原创 建小堆与向下调整-堆

package cn.tan.heap;//建立小堆的过程public class HeapTest { public static void shiftDown(long[] arr,int size,int index){ while(true){ int left=2*index+1; //先判定左节点 if(left>=size){ return; .

2022-03-15 14:29:13 350

原创 Java字符串为空的判定

一、判断一个字符串str不为空的方法有:  1、str == null;  2、"".equals(str);  3、str.length <= 0;  4、str.isEmpty();  注意:length是属性,一般集合类对象拥有的属性,取得集合的大小。  例如:数组。length就是取得数组的长度。  length()是方法,一般字符串类对象有该方法,也是取得字符串长度。  例如:字符串。length();  说明:  1、null表示这个字符串不指向任何

2022-02-16 17:20:06 1641

原创 二叉树遍历

因为树的定义本身就是递归定义,所以对于前序、中序以及后序这三种遍历我们使用递归的方法实现,而对于广度优先遍历需要选择其他数据结构实现,本例中我们使用队列来实现广度优先遍历。四种基本的遍历思想为:前序遍历:根结点 ---> 左子树 ---> 右子树中序遍历:左子树---> 根结点 ---> 右子树后序遍历:左子树 ---> 右子树 ---> 根结点层次遍历:从上到下,从左到右。比如,以下二叉树的各种遍历:前序遍历:5-3-2-4-6-8中序遍

2022-02-11 15:36:33 258

原创 剑指 Offer 58 - I. 翻转单词顺序

剑指 Offer 58 - I. 翻转单词顺序难度简单165输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串"I am a student. ",则输出"student. a am I"。示例 1:输入: "the sky is blue"输出:"blue is sky the"示例 2:输入: " hello world! "输出:"world! hello"解释: 输入字符串可以在前面或...

2022-02-08 17:37:43 65

原创 剑指 Offer 57. 和为s的两个数字

剑指 Offer 57. 和为s的两个数字难度简单158输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,则输出任意一对即可。示例 1:输入:nums = [2,7,11,15], target = 9输出:[2,7] 或者 [7,2]示例 2:输入:nums = [10,26,30,31,47,60], target = 40输出:[10,30] 或者 [30,10]第一想法就是用两层循环遍历,后来发现用时太长

2022-02-08 17:13:57 445

原创 剑指 Offer 21. 调整数组顺序使奇数位于偶数前面

剑指 Offer 21. 调整数组顺序使奇数位于偶数前面难度简单193输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数在数组的前半部分,所有偶数在数组的后半部分。示例:输入:nums =[1,2,3,4]输出:[1,3,2,4] 注:[3,1,2,4] 也是正确的答案之一。双指针应该牢记心中。class Solution { public int[] exchange(int[] nums) {int left=0,right=nums.l.

2022-02-08 17:10:05 418

原创 剑指 Offer 52. 两个链表的第一个公共节点

剑指 Offer 52. 两个链表的第一个公共节点难度简单424输入两个链表,找出它们的第一个公共节点。如下面的两个链表:在节点 c1 开始相交。示例 1:输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3输出:Reference of the node with value = 8输入解释:相交节点的值为 8 (注意,如果两个列表相交则不能为 0

2022-02-08 17:04:08 34

原创 剑指 Offer 25. 合并两个排序的链表

剑指 Offer 25. 合并两个排序的链表难度简单204输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。示例1:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4class Solution { public ListNode mergeTwoLists(ListNode l1, ListNode l2) {ListNode newNode=new ListNode

2022-02-08 16:55:32 391

原创 剑指 Offer 22. 链表中倒数第k个节点

剑指 Offer 22. 链表中倒数第k个节点难度简单323输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。例如,一个链表有 6 个节点,从头节点开始,它们的值依次是 1、2、3、4、5、6。这个链表的倒数第 3 个节点是值为 4 的节点。示例:给定一个链表: 1->2->3->4->5, 和 k = 2.返回链表 4->5.class Solution { publ

2022-02-08 16:46:51 42

原创 剑指 Offer 18. 删除链表的节点

剑指 Offer 18. 删除链表的节点难度简单192给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。返回删除后的链表的头节点。注意:此题对比原题有改动示例 1:输入: head = [4,5,1,9], val = 5输出: [4,1,9]解释: 给定你链表中值为5的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9.示例 2:输入: head = [4,5,1,9], val = 1输出: [4,5,..

2022-02-08 16:43:15 227

原创 剑指 Offer 47. 礼物的最大价值

剑指 Offer 47. 礼物的最大价值难度中等241在一个 m*n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格、直到到达棋盘的右下角。给定一个棋盘及其上面的礼物的价值,请计算你最多能拿到多少价值的礼物?示例 1:输入: [ [1,3,1], [1,5,1], [4,2,1]]输出: 12解释: 路径 1→3→5→2→1 可以拿到最多价值的礼物审题:1.每次向右或者

2022-02-07 19:34:21 40

原创 剑指 Offer 42. 连续子数组的最大和

剑指 Offer 42. 连续子数组的最大和难度简单455输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。示例1:输入: nums = [-2,1,-3,4,-1,2,1,-5,4]输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。审题:1.子数组有两种情况,要么是一个,要么是连续的多个做题:,为了保证连续性,并且求比较大的值的话,要么就加上当前元素,要么就不加,不加之后看.

2022-02-07 18:01:09 704

原创 剑指 Offer 63. 股票的最大利润

剑指 Offer 63. 股票的最大利润难度中等210假设把某股票的价格按照时间先后顺序存储在数组中,请问买卖该股票一次可能获得的最大利润是多少?示例 1:输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。 注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格。示例 2:输入: [7,6,4,3,1]输出: 0解释: 在这种情

2022-02-07 17:30:25 137

原创 力扣剑指 Offer 50. 第一个只出现一次的字符

剑指 Offer 50. 第一个只出现一次的字符难度简单172收藏分享切换为英文接收动态反馈在字符串 s 中找出第一个只出现一次的字符。如果没有,返回一个单空格。 s 只包含小写字母。示例 1:输入:s = "abaccdeff"输出:'b'示例 2:输入:s = "" 输出:' 'class Solution { public char firstUniqChar(String s) {HashMap<Character,Boolean> ma

2022-01-28 10:47:57 71

原创 力扣剑指 Offer 11. 旋转数组的最小数字

剑指 Offer 11. 旋转数组的最小数字难度简单495收藏分享切换为英文接收动态反馈把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。给你一个可能存在重复元素值的数组numbers,它原来是一个升序排列的数组,并按上述情形进行了一次旋转。请返回旋转数组的最小元素。例如,数组[3,4,5,1,2]为[1,2,3,4,5]的一次旋转,该数组的最小值为1。示例 1:输入:[3,4,5,1,2]输出:1示例 2:输入:[2,2,2,0,1]...

2022-01-28 10:41:29 67

原创 力扣剑指offer04二维数组中的查找

剑指 Offer 04. 二维数组中的查找难度中等549收藏分享切换为英文接收动态反馈在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。示例:现有矩阵 matrix 如下:[ [1, 4, 7, 11, 15], [2, 5, 8, 12, 19], [3, 6, 9, 16, 22], [10, 13, 14, 1

2022-01-28 10:36:41 377

原创 力扣剑指offer53-||0~n-1中缺失的数字

剑指 Offer 53 - II. 0~n-1中缺失的数字一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内。在范围0~n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字。示例 1:输入: [0,1,3]输出: 2示例 2:输入: [0,1,2,3,4,5,6,7,9]输出: 8长度为n-1,每个数字的范围也在0-n-1之内,数组里面只有一个数不在数组中,有所以加上那个不在该数组中的数有n个数。class Sol

2022-01-28 10:28:52 6140

原创 力扣剑指offer53-1在排序数组中查找数字 I

统计一个数字在排序数组中出现的次数。示例 1:输入: nums = [5,7,7,8,8,10], target = 8输出: 2示例2:输入: nums = [5,7,7,8,8,10], target = 6输出: 0首先看到题目,排序数组,有序首先想到的应该是二分查找class Solution { public int search(int[] nums, int target) {return helper(nums,target)-helper(num.

2022-01-28 10:10:09 478

空空如也

空空如也

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

TA关注的人

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