- 博客(54)
- 资源 (1)
- 收藏
- 关注
原创 TCP三次握手、四次挥手
1、三次握手(1)三次握手的详述首先Client端发送连接请求报文,Server段接受连接后回复ACK报文,并为这次连接分配资源。Client端接收到ACK报文后也向Server段发生ACK报文,并分配资源,这样TCP连接就建立了。最初两端的TCP进程都处于CLOSED关闭状态,A主动打开连接,而B被动打开连接。(A、B关闭状态CLOSED——B收听状态LISTEN——A同步已发送状态SYN-SENT——B同步收到状态SYN-RCVD——A、B连接已建立状态ESTABLISHED)B的TCP服务器进
2020-08-18 09:11:37
164
原创 栈处理 包含min函数的栈,辅助栈栈顶存储最小值
定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。//思路:创建一个辅助栈,栈顶用来表示存储每次加入新元素后所能得到最小的值//核心:1,min栈存储时候,当新值大于栈顶时候,加入栈顶元素//2,pop的时候要记得将min也pop了,import java.util.Stack;public class Solution { //java栈中没有 top()函数 Stack<Integer> nor=new Sta
2020-08-12 09:38:24
156
原创 读取数据流中的中位数
题目描述如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。我们使用Insert()方法读取数据流,使用GetMedian()方法获取当前读取数据的中位数。import java.util.PriorityQueue;import java.util.Comparator;public class Solution { //小顶堆 PriorityQu
2020-08-01 16:50:58
213
原创 Linkedlist单调队列实现滑动窗口最大值
题目给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,5}; 针对数组{2,3,4,2,6,2,5,1}的滑动窗口有以下6个: {[2,3,4],2,6,2,5,1}, {2,[3,4,2],6,2,5,1}, {2,3,[4,2,6],2,5,1}, {2,3,4,[2,6,2],5,1}, {2,3,4,2,[6,2,5],1}, {2,3,4,2,6,
2020-07-30 11:29:08
217
原创 dfs-矩阵中的路径
请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。 例如矩阵中包含一条字符串"bcced"的路径,但是矩阵中不包含"abcb"路径,因为字符串的第一个字符b占据了矩阵中的第一行第二个格子之后,路径不能再次进入该格子。public class Solution { public boolean hasPath(char
2020-07-30 10:36:10
147
原创 剪绳子-四种解法
题目描述给你一根长度为n的绳子,请把绳子剪成整数长的m段(m、n都是整数,n>1并且m>1,m<=n),每段绳子的长度记为k[1],…,k[m]。请问k[1]x…xk[m]可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。暴力法运行超时public class Solution { public int get(int n){ if(n<=4) return n;
2020-07-30 09:40:12
898
原创 力扣-【数组】 求非递增需要移动的次数
class Solution { public int heightChecker(int[] heights) { int[] height=new int[heights.length]; //height=heights; for(int i=0;i<heights.length;i++){ height[i]=heights[i]; } Arrays.sort(height
2020-07-27 10:01:59
103
原创 计算n个括号,所有可能存在的方式
计算n个括号,所有可能存在的方式public class Solution{ public List<String> gener(int n){ List<String> res=new List<>(); String s=""; //int left=0,right=0; helper(s,res,n,0,0); } public void helper(String s,List<String> res,int n,int lef
2020-07-24 16:11:17
171
原创 括号匹配
用栈来匹配public class Solution{ public boolean isVolid(String s){ Stack<Character> mark=new Stack<>(); if(s==null || s.length==0) return false; for(int i=0;i<s.length();i++){ //是左括号直接压入 if(s.charAt(i)=='('||s.charAt(i)=='['||s.charAt(i
2020-07-24 15:40:36
90
原创 移除链表的倒数第N个节点
移除链表的倒数第N个节点快慢指针,注意细节public class Solution{ public ListNode removeFromEnd(ListNode head,int n){ ListNode dummy=new ListNode(0); dummy.next=head; ListNode fast=dummy; ListNode slow=dummy; for(int i=0;i<n;i++){ fast=fast.next; if(fas
2020-07-24 14:51:23
70
原创 leetcode 17 lettercombinations of a phone number
题目描述在电话的九宫键来进行输入,输出可能的组成DFS深度优先,递归public class Solution{ public List<String> letterCombinations(String digits){ List<String> res=new LinkedList<String>(); if(digits==null||digits.length()==0) return res; HashMap<Character,char
2020-07-24 11:09:14
113
原创 leetcode 16 3Sum closest
题目描述给一个数组,和目标值,三个数使其和最接近目标值区别3sum:不用进行相同的处理//排序,三个值(确定一个值,另两个指针),如果==target直接返回,否则记录下相差最小的情况public class Solution{ public int threeSumClosest(int[] nums,int target){ if(nums==null || nums.length==0) return 0; Arrays.sort(nums); int data= nums[0]
2020-07-24 10:11:08
87
原创 leeetcode-5 3Sum
题目描述给定一个无序的数组,找到三个数字的和为零public ArrayList<ArrayList<Integer>> sum_3(int[] nums){ ArrayList<List<Intger>> res=new ArrayList<>(); if(nums==null|| nums.length<=2) return res; int n=nums.length; int i=0; //排序处理,确定一个值,用滑动窗
2020-07-24 09:51:24
128
原创 leetcode 13 Roman to Integer
题目描述罗马字符转换为int型//思路:从左到右进行累计,出现特定情况就减去两倍public class Solition{ public int romanTont(String input){ if(input==null || input.length()==0) return 0; int result=0; if(input.indexOf("CM")!=-1) result-=200; if(input.indexOf("CD")!=-1) result-=200;
2020-07-24 09:26:10
96
原创 输入一个链表,反转链表后,输出新链表的表头。
题目描述输入一个链表,反转链表后,输出新链表的表头。import java.util.LinkedList;import java.util.Deque;/*public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}*/public class Solution { public ListNode Reve
2020-07-21 10:20:06
693
1
原创 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则
题目描述输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则/*public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}*/public class Solution { public ListNode Merge(ListNode list1,ListNode list2)
2020-07-21 09:57:20
107
原创 输入两棵二叉树A,B,判断B是不是A的子结构
题目描述输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)第一步:根据题意可知,需要一个函数判断树A和树B是否有相 同的结构。显然是个递归程序。可考察递归程序3部曲。递归函数的功能:判断2个数是否有相同的结构,如果相同,返回true,否则返回false递归终止条件: 如果树B为空,返回true,此时,不管树A是否为空,都为true否则,如果树B不为空,但是树A为空,返回false,此时B还没空但A空了,显然false 下一步递归参数:
2020-07-21 09:44:44
247
原创 二叉树镜像
题目描述操作给定的二叉树,将其变换为源二叉树的镜像。/**public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; }}*/public class Solution { public void Mirror(TreeNode root
2020-07-21 09:04:09
137
1
原创 顺时针打印矩阵
题目描述输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.import java.util.*;public class Solution { public ArrayList<Integer> printMatrix(int [][] matrix) {
2020-07-20 22:15:16
120
原创 从上往下打印出二叉树的每个节点,同层节点从左至右打印
题目从上往下打印出二叉树的每个节点,同层节点从左至右打印import java.util.*;/**public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; }}*/public class Solution { public Arra
2020-07-20 17:01:16
119
原创 最小的k个数
题目输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。思路冒泡排序import java.util.ArrayList;public class Solution { public ArrayList<Integer> GetLeastNumbers_Solution(int [] input, int k) { ArrayList<Integer> ans=new ArrayL
2020-07-17 09:39:23
85
原创 连续子数组的最大和
题目HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。给一个数组,返回它的最大连续子序列的和,你会不会被他忽悠住?(子向量的长度至少是1)暴力剪枝public class Solution {
2020-07-17 09:30:01
83
原创 把数组排成最小的数
题目输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。linkimport java.util.ArrayList;public class Solution { public String PrintMinNumber(int [] numbers) { if(numbers==null || numbers.length==0)return ""
2020-07-16 21:51:08
97
原创 n之前1出现的次数
题目求出1-13的整数中1出现的次数,并算出100-1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数(从1 到 n 中1出现的次数)。public class Solution { public int NumberOf1Between1AndN_Solution(int n) { int cou
2020-07-16 21:49:24
85
原创 丑数,质因子(能够分解成2^x3^y5^z)
题目把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。思路这道题目自己是有思路的,丑数能够分解成2x3y5^z,所以只需要把得到的丑数不断地乘以2、3、5之后并放入他们应该放置的位置即可,而此题的难点就在于如何有序的放在合适的位置。解题连接//创建一个数组来存储第i个丑数,//将丑数乘以2,3,5;取出最小的那个是下一个丑数,//判断是通过乘2,3,5中那个一
2020-07-16 20:31:24
182
原创 两个链表的公共结点
题目输入两个链表,找出它们的第一个公共结点/*public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}*///思路:假设p1长于p2,那么第一次p2为null,p1到终点就是p1-p2;将p2设为p1起点,再次开始;如果p1-p2public class Solution { public ListNode
2020-07-16 09:18:59
103
原创 数字在排序数组中出现的次数
题目统计一个数字在排序数组中出现的次数。public class Solution { public int GetNumberOfK(int [] array , int k) { //count记录,index记录在碰到k时候的下标,用于剪枝 int count=0,index=array.length; for(int i=0;i<array.length;i++){ if(array[i]==k){
2020-07-16 08:51:53
71
原创 二叉树的深度(层序遍历和递归思路)
题目输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。递归思路O(n) O(n)/**public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; }}*/public cla
2020-07-16 08:33:17
188
原创 判断平衡二叉树
题目输入一棵二叉树,判断该二叉树是否是平衡二叉树。在这里,我们只需要考虑其平衡性,不需要考虑其是不是排序二叉树思路从下往上遍历,如果子树是平衡二叉树,则返回子树的高度;如果发现子树不是平衡二叉树,则直接停止遍历,这样至多只对每个结点访问一次。public class Solution { public boolean IsBalanced_Solution(TreeNode root) { return !(-1==getDepth(root)); } pr
2020-07-16 08:03:24
74
原创 数组中只出现一次的数(内含两个)
题目一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字法1:hash方法import java.util.*;//num1,num2分别为长度为1的数组。传出参数//将num1[0],num2[0]设置为返回结果public class Solution { public void FindNumsAppearOnce(int [] array,int num1[] , int num2[]) { Map<Integer,In
2020-07-15 15:39:22
92
原创 (滑动窗口)之和为S的连续正数序列
知识补充:什么是滑动窗口?顾名思义,首先是一个窗口,既然是一个窗口,就需要用窗口的左边界i和右边界j来唯一表示一个窗口,其次,滑动代表,窗口始终从左往右移动,这也表明左边界i和右边界j始终会往后移动,而不会往左移动。这里我用左闭右开区间来表示一个窗口。比如`滑动窗口的操作扩大窗口,j += 1缩小窗口,i += 1算法步骤:初始化,i=1,j=1, 表示窗口大小为0如果窗口中值的和小于目标值sum, 表示需要扩大窗口,j += 1否则,如果狂口值和大于目标值sum,表示需要缩小窗口,i
2020-07-15 15:05:07
109
原创 有序数字查找两数和为定值且乘积最小
题目输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。输出描述:对应每个测试案例,输出两个数,小的先输出。import java.util.ArrayList;public class Solution { public ArrayList<Integer> FindNumbersWithSum(int [] array,int sum) { ArrayList<Integer&
2020-07-15 11:02:41
253
原创 剑指offer-左旋转字符串
汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!public class Solution { public String LeftRotateString(String str,int n) { //n%长度 if(str==n
2020-07-15 10:29:00
97
原创 翻转单词顺序列
题目牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?public class Solution { public String ReverseSentence(String str)
2020-07-15 10:16:05
84
原创 扑克牌顺子
题目LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张_)…他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他决定去买体育彩票,嘿嘿!!“红心A,黑桃3,小王,大王,方片5”,“Oh My God!”不是顺子…LL不高兴了,他想了想,决定大\小 王可以看成任何数字,并且A看作1,J为11,Q为12,K为13。上面的5张牌就可以变成“1,2,3,4,5”(大小王分别看作2和4),“So Lucky!”。LL决定去买体育彩票啦。 现在,
2020-07-15 10:13:08
99
原创 孩子们的游戏(最后一个)
题目每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此。HF作为牛客的资深元老,自然也准备了一些小游戏。其中,有个游戏是这样的:首先,让小朋友们围成一个大圈。然后,他随机指定一个数m,让编号为0的小朋友开始报数。每次喊到m-1的那个小朋友要出列唱首歌,然后可以在礼品箱中任意的挑选礼物,并且不再回到圈中,从他的下一个小朋友开始,继续0…m-1报数…这样下去…直到剩下最后一个小朋友,可以不用表演,并且拿到牛客名贵的“名侦探柯南”典藏版(名额有限哦!!_)。请你试着想下,哪个小朋友会得到这
2020-07-15 09:20:10
96
原创 求1+2+3+...+n,与的短路实现
题目求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)思路:题目限制,利用短路原则,&& 左边不符合就不执行右边判断,当n=0;时候不满足左边,就不计算;返回值为零public class Solution { public int Sum_Solution(int n) { //if(n==1) return 1; //return Sum_Solution(
2020-07-14 17:24:18
116
原创 将字符串转换成整数
题目:将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0输入描述:输入一个字符串,包括数字字母符号,可以为空输出描述:如果是合法的数值表达则返回该数字,否则返回0输入+21474836471a33输出21474836470public class Solution { public int StrToInt(String str) { if(str==null || str.length()==0)
2020-07-14 17:01:00
110
原创 数组中重复的数字
题目在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。参数:nubmbers:数组length:数组长度duplication:长度为1的数组,将值放入其中// Return value: true if the input is valid, and there are
2020-07-14 16:16:32
108
原创 滑动窗口
题目:给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,5}; 针对数组{2,3,4,2,6,2,5,1}的滑动窗口有以下6个: {[2,3,4],2,6,2,5,1}, {2,[3,4,2],6,2,5,1}, {2,3,[4,2,6],2,5,1}, {2,3,4,[2,6,2],5,1}, {2,3,4,2,[6,2,5],1}, {2,3,4,2,6,
2020-07-12 13:04:56
117
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人