自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 牛客--设计LRU缓存结构

题目:描述设计LRU(最近最少使用)缓存结构,该结构在构造时确定大小,假设大小为 k ,并有如下两个功能1. set(key, value):将记录(key, value)插入该结构2. get(key):返回key对应的value值提示:1.某个key的set或get操作一旦发生,认为这个key的记录成了最常使用的,然后都会刷新缓存。2.当缓存的大小超过k时,移除最不经常使用的记录。3.输入一个二维数组与k,二维数组每一维有2个或者3个数字,第1个数字为opt,第2,3个数

2021-10-08 21:14:59 193

原创 牛客---(合唱队)

/** 题目: 计算最少出列多少位同学,使得剩下的同学排成合唱队形说明:N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学排成合唱队形。合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2…,K,他们的身高分别为T1,T2,…,TK, 则他们的身高满足存在i(1<=i<=K)使得T1<T2<......<Ti-1<Ti>Ti+1>......>TK。你的任务是,已知所有N位同学的身高,计算最少需要几位同.

2021-08-13 17:01:31 254

原创 牛客---坐标移动

/*题目: 开发一个坐标计算工具, A表示向左移动,D表示向右移动,W表示向上移动,S表示向下移动。从(0,0)点开始移动,从输入字符串里面读取一些坐标,并将最终输入结果输出到输出文件里面。输入:合法坐标为A(或者D或者W或者S) + 数字(两位以内)坐标之间以;分隔。非法坐标点需要进行丢弃。如AA10; A1A; $%$; YAD; 等。下面是一个简单的例子 如:A10;S20;W10;D30;X;A1A;B10A11;;A10;处理过程:起点(0,0)+ A10 = (-.

2021-08-09 11:29:57 216

原创 leetcode---跳跃游戏

/**题目:给定一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标。*算法:贪心算法:对于数组中的任意一个位置y,只要存在一个位置x,它本身可以到达,并且它跳跃的最大长度为x+nums[x],这个值大于等于y,那么位置y就可以到达。*们依次遍历数组中的每一个位置,并实时维护 最远可以到达的位置。对于当前遍历到的位置 xxx,如果它在 最远可以到达的位置 的范围内,那么我们就可以从起点通过若干次跳跃到达该位置,.

2021-07-21 18:11:28 211 1

原创 leetcode---字母异位词分组

/**题目:给定一个字符串数组,将字母异位词组合在一起。可以按任意顺序返回结果列表。字母异位词指字母相同,但排列不同的字符串。*算法:对给定字符串数组中的每一个字符进行排序,然后依次遍历,使用一个map来存储该字符串是否已经出现过** */package cn.wanggeng;import java.util.*;public class GroupAnagrams { public List<List<String>> groupAnagrams(St.

2021-07-20 10:55:23 95

原创 leetcode---子集II

/** 题目:给你一个整数数组nums ,其中可能包含重复元素,请你返回该数组所有可能的子集(幂集)。解集不能包含重复的子集。返回的解集中,子集可以按任意顺序排列。* 算法:组合问题可以转化为树形结构,题目中的“使用过”在树形结构上是有两个维度的,一个维度是同一树枝上使用过,一个维度是同一树层上使用过。* 我们要去重的是同一树层上的“使用过“,同一树枝上的都是一个组合里的元素,不用去重。** */代码实现:package cn.wanggeng.back;import java.util.

2021-07-14 15:21:11 151

原创 leetcode---跳跃游戏

/*题目:给定一个非负整数数组,你最初位于数组的第一个位置。 数组中的每个元素代表你在该位置可以跳跃的最大长度。 你的目标是使用最少的跳跃次数到达数组的最后一个位置。 假设你总是可以到达数组的最后一个位置。 示例 1:输入: [2,3,1,1,4]输出: 2解释: 跳到最后一个位置的最小跳跃数是 2。 从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。* 算法:贪心算法(从局部最优解推导全局最.

2021-07-08 17:09:35 145

原创 leetcode---字符串相乘

/*题目:给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。算法:将num1与num2的每个数相乘,然后相加,注意不同位的补0。**** */代码实现:package cn.wanggeng;public class Multiply { public String multiply(String num1, String num2) { if (num1.equals("0") || .

2021-07-06 16:37:50 85

原创 leetcode---组合和(二)

/**题目描述:给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的每个数字在每个组合中只能使用一次。* 说明:(1)所有数字(包括目标数)都是正整数,(2)解集不能包含重复的组合。* 算法:为了避免产生重复解,首先需要将数组进行排序,然后采用回朔算法 回朔算法的具体步骤如下: 剪枝:如果当前tmp数组的和cur已经大于目标target,没必要枚举了,直接return .

2021-07-05 11:29:08 87

原创 leetcode---组合和

/*题目:给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的数字可以无限制重复被选取。示例 1:输入:candidates = [2,3,6,7], target = 7,所求解集为:[ [7], [2,2,3]]。* 算法:采用回朔思想*** */package cn.wanggeng.back;public class Combination.

2021-07-02 18:09:53 108

原创 leetcode---有效的数独

Spring出现的目的:解决企业级应用开发的复杂性而创建的,简化开发。Spring如何简化Java开发:1)基于POJO的轻量级和最小侵入性编程(最小侵入性指对原有代码不做大的改变)2)通过IOC,依赖注入(DI)和面向接口实现松耦合3)基于切面(AOP)和惯例进行声明式编程4)通过切面和模版减少样式代码...

2021-07-02 11:08:19 80

原创 leetcode---在排序数组中查找元素的第一个和最后一个位置

/*题目:给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值 target,返回 [-1, -1]。输入:nums = [5,7,7,8,8,10], target = 8输出:[3,4]* 算法:二分查找** */package cn.wanggeng;public class SearchRange { //第一种方法// public int[] searchRange(int[].

2021-07-01 11:44:08 107

原创 leetcode---下一个字典值

/** 题目:实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。也就是说找到一个比给定数组大的值,但这个值是最接近的。* 以数字序列[1,2,3]为例,其按照字典序依次为:* [1,2,3] [1,3,2] [2,1,3] [2,3,1] [3,1,2] [3,2,1]* 此时[1,2,3]的下一个排列为[1,3,2]* 算法:要找到一个给定数字的下一个字典序列值,则这个数字交换要尽可能的靠右,因为改动越高位的数,则数值会和给定的数差越大。* .

2021-06-30 15:36:46 119

原创 leetcode----删除链表中的倒数第N个节点

题目:给你一个链表,删除链表的倒数第n个结点,并且返回链表的头结点。示例 1:输入:head = [1,2,3,4,5], n = 2输出:[1,2,3,5]示例 2:输入:head = [1], n = 1输出:[]示例 3:输入:head = [1,2], n = 1输出:[1]算法:(1)进行一次遍历,在遍历途中使用一个map来进行编号存储,编号从1开始,删除的节点就为链表长度-n+1。算法:(2)使用双指针,fast指针比slow指针快n个长度,那么当fas..

2021-06-29 11:38:01 90

原创 leetcode---电话号码组合

题目:给定一个仅包含数字2-9的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。算法:回溯思想。首先先用一个map存储数字和对应字符串的组合,然后采用回溯遍历每一种可能的排列组合。代码:class Solution {public List letterCombinations(String digits) {List combinations = new ArrayList();..

2021-06-28 11:08:16 244

转载 HTTP知识点总结

本文转自“https://jishuin.proginn.com/p/763bfbd2831c”

2021-06-08 16:50:46 622

转载 单例模式详解

本文转自“https://www.136.la/shida/show-102520.html”

2021-06-04 09:37:43 240

原创 单例模式知识点

单例模式:简单来说就是一个类只能构建一个对象的设计模式。单例模式懒汉模式的代码实现:

2021-06-02 17:44:51 156

原创 redis知识总结

redis的特点:(1)对于读写操作的性能高(2)持久化(3)数据类型丰富

2021-06-02 09:55:20 161

原创 leetcode---验证二叉树的前序列化

/*题目:序列化二叉树的一种方法是使用前序遍历。当我们遇到一个非空节点时,我们可以记录下这个节点的值。如果它是一个空节点,我们可以使用一个标记值记录,例如 #。 _9_ / \ 3 2 / \ / \ 4 1 # 6/ \ / \ / \# # # # # #例1:输入: "9,3,4,#,#,1,#,#,2,#,6,#,#"输出: true例2:输入: "1,#"输出: false例3:输入: "9,#,#,1"输出: fal.

2021-05-27 21:05:12 72

原创 leetcode---不同字符的最小序列

/** 返回 s 字典序最小的子序列,该子序列包含 s 的所有不同字符,且只包含一次。* 例1:输入:s = "bcabc" 输出:"abc"* 例2:输入:s = "cbacdcbc" 输出:"acdb"** */package cn.wanggeng.stack;import java.util.ArrayDeque;import java.util.Deque;public class SmallestSubsequence { public S.

2021-05-25 15:17:54 178

原创 leetcode---二叉树的交叉打印

/** 题目:二叉树的交叉遍历(给定一个二叉树,返回其节点值的锯齿形层序遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行。))*例如:给定二叉树 [3,9,20,null,null,15,7],* 3 / \ 9 20 / \ 15 7 输出: * [ [3], [20,9], [15,7]]*算法:广度优先遍历加层数判断,如果层数为奇数层,就从左往右遍历,如果层数为偶数层,就从右往左遍历。使用双端队列进行.

2021-05-19 10:53:30 212

原创 leetcode---简化路径问题

/**给你一个字符串 path ,表示指向某一文件或目录的 Unix 风格 绝对路径 (以 '/' 开头),请你将其转化为更加简洁的规范路径。在 Unix 风格的文件系统中,一个点(.)表示当前目录本身;此外,两个点 (..) 表示将目录切换到上一级(指向父目录);两者都可以是复杂相对路径的组成部分。任意多个连续的斜杠(即,'//')都被视为单个斜杠 '/' 。 对于此问题,任何其他格式的点(例如,'...')均被视为文件/目录名称。请注意,返回的 规范路径 必须遵循下述格式: 始终以斜杠 .

2021-05-17 11:44:41 134

原创 leetcode --- 递增搜索二叉树

/*题目描述:给你一棵二叉搜索树,请你 按中序遍历 将其重新排列为一棵递增顺序搜索树,使树中最左边的节点成为树的根节点,并且每个节点没有左子节点,只有一个右子节点。*算法:[1] 对给定二叉搜索树进行中序遍历,使用一个list集合来存储所遍历过程中的每个节点的值,然后遍历这个list集合,来创建一棵二叉树。* [2] 在中序遍历过程中通过改变所遍历节点的左右节点的指向,来重新塑造二叉树* * Definition for a binary tree node. * public c...

2021-04-29 15:44:01 135

原创 leetcode---对象二叉树

/*问题描述:判断一颗二叉树是否为对称二叉树,比如 1 / \ 2 2 / \ / \3 4 4 3 是一颗对称二叉树 1 / \ 2 2 \ \ 3 3 不是一颗对称二叉树 算法思想:(1)递归,思考对称二叉树的性质:如果一个二叉树的左子树和右子树镜像对称,那么这个树就是对称的。因此该问题可以转化为: [1] 两颗树具有相同的根节点 [2] 每个树的右子树都与另一个树的左子树镜像对称(也就是.

2021-04-28 11:35:11 119

原创 mysql性能优化(一)

mysql性能优化的几个方面:(1)SQL及索引优化【1】查看MySQL慢查日志是否开启:show variables like 'show_query_log';【2】'log_queries_not_using_indexes'变量表示是否把没有使用索引的sql记录到慢查询日志中,该值为off时表示不记录,该值为on时表示记录,(set global log_queries_not_using_indexes = on)【3】‘long_query_time’变量表示把超过多少s

2021-04-26 20:16:58 90

原创 KMP算法原理以及java代码实现

例题描述:String haystack = "abcabaabaabcacb";String needle = "abaabcac"; 求字符串needle与字符串haystack的子串匹配的部分,返回haystack字符串匹配初的起始位置。KMP算法:KMP算法的核心思想是求解next[]数组,next[]数组的含义是所求串中前缀与后缀相等的最大长度。比如needle字符串的值为“abaabcac”,那么其的next数组为:needle a b a a b ..

2021-04-25 16:34:25 180

原创 TCP相关知识总结(二)

TCP四次挥手: 客户端打算关闭连接,此时会发送一个 TCP 首部FIN标志位被置为1的报文,也即FIN报文,之后客户端进入FIN_WAIT_1状态。 服务端收到该报文后,就向客户端发送ACK应答报文,接着服务端进入CLOSED_WAIT状态。 客户端收到服务端的ACK应答报文后,之后进入FIN_WAIT_2状态。 等待服务端处理完数据后,也向客户端发送FIN报文,之后服务端进入LAST_ACK状态。 客户端收到服务端...

2021-04-25 14:38:03 213

原创 TCP相关知识总结(一)

(1)TCP存在的原因:由于网络层IP是不可靠的,它不保证数据包的交付以及数据包中数据的完整性,因此需要传输层TCP的可靠数据传输。TCP保证接收端接收到的数据包是无损坏、无间隔、非冗余和按序的。(2)UDP和TCP的区别:协议 连接 服务对象 可靠性 拥塞控制、 流量控制 首部开销 应用场景 TCP 面向连接的传输层协议,在传输数据之前要确保建立连接 一对一的服务,即一条连接只有两个端点 可靠交付,数据以无差错、

2021-04-12 19:22:51 215

原创 leetcode---链表回环问题2

问题描述:给定一个链表,判断该链表是否是回环链表,如果是,则返回链表环的入口位置,如果不是,则返回空。算法思想:(1)遍历链表,使用HashSet来判断链表中的某个节点是否已经被遍历过。 (2)双指针,定义一个快指针fast和一个慢指针slow,快指针每次向前移动两步,慢指针每次向前移动一步。设链表入环前的长度为a,环内的长度为b,走的环 圈数为n,则两个指针第一次相遇时,快指针fast走的长度为f=...

2021-03-11 11:22:56 251

原创 leetcode----不同路径问题

题目描述:一个机器人在一个m*n的方格里,试问从左上角走到左下角共有多少种路径?解题思路:设机器人的位置为f(0)(0),终点右下角位置为f(m-1)(n-1),那么去终点位置的上一步有两种情况,即f(m-1-1)(n-1)+f(m-1)(n-1-1)。 但是当m=0,n=0时,不符合这种情况,f(0)(0),f(0)(n-1),f(m-1)(0)只有一种到达情况。代码:public class Path { public int...

2021-03-10 10:47:27 104

原创 leetcode---除自身外的数组的乘积

/** 给定一个都是int类型的数组,输出一个新数组,新数组中的每个元素等于给定数组中除该位置的元素其他所有因素的乘积。* 算法:创建两个数组L和R,L数组中的每个元素的值等于其左边所有元素的乘积,即 L[i] = L[i-1] * nums[i-1];* R数组中的每个元素的值等于其右边所有元素的乘积,即R[i] = R[i+1] * nums[i+1].* 由于L[0]和R[length-1]的左右都没有元素,故L[0]和R[length-1]的值设为1。* */p.

2020-12-24 17:09:47 154 1

原创 leetcode---全排列问题

/** 给定一个 没有重复 数字的序列,返回其所有可能的全排列。例如[1,2,3],输出* [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1] ]** */import java.util.ArrayList;import java.util.List;public class Permutation { public List<List<Integer>> permut.

2020-12-21 21:06:32 107

原创 leetcode---正方形矩阵

/** 给定一个int类型的数n,顺序输出一个螺旋排列的正方行矩阵,比如当n=3时,输出[ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ]]*算法:设定上下左右四个边界,每遍历一轮就调整临界值,比如:* 当从左到右填完后,上边界+1,相当于上边界向内缩。* */import java.util.Arrays;public class SquareMatrix { public int[][] matrix(int n){ .

2020-12-14 11:13:32 739 1

原创 leetcode---最长公共前缀

/** 要求:找出给定字符数组中的每个字符的最长公共前缀。* 算法1:横向扫描:将给定数组中的第一个字符串与第二个进行比较,得出公共前缀后用该前缀继续与第三个字符串进行比较,再得出新的公共前缀,依次与各个字符串比较后得到* 的公共前缀即为所求前缀。在比较过程中,如果遇到公共前缀为空,则直接跳出循环,返回无公共前缀。* 算法2:纵向扫描:将字符数组中的第一个字符串作为对比指标,与数组中的其他字符串依次比较其每一个下标,当比较的下标值不同时,就返回对比指标此下标值之前的元素.

2020-12-08 16:33:23 88

原创 leetcode---有效括号问题

/** 有3种括号,({[必须与)}]正确匹配,只需要考虑括号的匹配性,不需要考虑优先级。* 算法思想:使用栈数据结构,当遇到左括号的时候入栈,遇到右括号的时候出栈,这样后进栈的左括号必须与先遇到的右括号匹配,否则返回false.* */import java.net.StandardSocketOptions;import java.util.Deque;import java.util.HashMap;import java.util.LinkedList;import java.u.

2020-12-07 18:14:11 154

原创 leetcode---判断是否为2的幂

/** 判断给定数是否为2的幂。* 1.判断该数是否能被2整除,若不能整除,直接返回false,若能整除,再判断最后除2的商是否等于1,若等于1,则返回true,否则返回false。* 2.若一个数是2的幂数,则它的二进制表示只存在一个1,且该1位于二进制的最右边。使用&运算,运算(x & (-x))则只保留x二进制的最右边的1。* 比如:x = 6 的二进制表示: 0000 0110* -x 的二进制表示:1111 1010* x &amp.

2020-12-04 10:30:32 151

原创 leetcode---两个排序数组重新排序

/** 将两个已排序数组重新排序,重新排序的数组用已知数组接收,假设该数组长度足够大。* 1.使用java API来完成* 2.使用双指针(从前往后),需要使用一个额外数组空间。* 3.使用双指针(从后往前),不需要额外使用空间。* */import java.util.Arrays;public class MergeOrderArray { public static void main(String[] args) { MergeOrderArray m =.

2020-12-03 18:25:10 367

原创 leetcode---链表回环问题

/*判断链表是否有回环。* 1.哈希表:利用HashSet的contains方法来判断是否已经存在该ListNode元素,或者利用HashSet的去重复机制,来判断是否存在该元素,从而判断是否有回环。* 2.双指针:定义一快一慢指针,若链表存在回环,则两指针必须会相遇。* 判断的初始条件为slow == fast 结束循环,故初始化时fast不能和slow同为开始节点。* * class ListNode { * int val; * ListNode ne.

2020-12-03 16:08:12 418

原创 leetcode---爬楼梯问题

/** 爬楼梯问题:每一次可以选择爬1层或者爬2层。求爬n层楼梯有几种选择* 1.动态规划:爬n层楼梯的选择为f(n),那么f(n) = f(n-1) + f(n-2)。* 2. 尾递归,比直接递归的好处是不需要记录本次递归前的函数状态,时间消耗少。* */package cn.wanggeng;import java.awt.desktop.SystemSleepEvent;public class ClimbStairs { public int climbStairs(i.

2020-12-03 15:36:32 173

空空如也

空空如也

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

TA关注的人

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