自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 最小覆盖子串

题目链接:最小覆盖子串题目描述:给你一个字符串 S、一个字符串 T 。请你设计一种算法,可以在 O(n) 的时间复杂度内,从字符串 S 里面找出:包含 T 所有字符的最小子串。示例:输入:S = “ADOBECODEBANC”, T = “ABC”输出:“BANC”提示:如果 S 中不存这样的子串,则返回空字符串 ""。如果 S 中存在这样的子串,我们保证它是唯一的答案。题目分析:双指针加滑动窗口。在S中用i ,j 维护一个滑动窗口,j不断向右延申,一旦窗口中的值包含T中所有字符时,我们

2020-10-30 01:09:07 300

原创 求解一个数的平方根

描述: 求解一个数的平方根,返回值不一定指的是整数import java.util.*;public class Main { static Scanner in = new Scanner(System.in); static double sqrt(double t) { double low=0; double high=t; double mid=low+(high-low)/2; while(high-low

2020-10-22 15:58:55 375

原创 括号生成

题目链接:括号生成题目描述:数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。示例:输入:n = 3输出:[“((()))”,“(()())”,“(())()”,“()(())”,“()()()”]代码:class Solution{ int n; char[] cur = new char[n*2]; List<String> res = new ArrayList(); solve(cur,

2020-10-22 11:22:36 253

原创 环形链表

题目链接:环形链表题目描述:给定一个链表,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。如果链表中存在环,则返回 true 。 否则,返回 false 。示例 1:输入:head = [3,2,0,-4], pos = 1输出:tr

2020-10-15 20:17:48 207

原创 丢鸡蛋

题目链接:鸡蛋掉落题目描述:鸡蛋掉落难度困难496你将获得 K 个鸡蛋,并可以使用一栋从 1 到 N 共有 N 层楼的建筑。每个蛋的功能都是一样的,如果一个蛋碎了,你就不能再把它掉下去。你知道存在楼层 F ,满足 0 <= F <= N 任何从高于 F 的楼层落下的鸡蛋都会碎,从 F 楼层或比它低的楼层落下的鸡蛋都不会破。每次移动,你可以取一个鸡蛋(如果你有完整的鸡蛋)并把它从任一楼层 X 扔下(满足 1 <= X <= N)。你的目标是确切地知道 F 的值是多少。无

2020-10-11 21:37:35 232

原创 2020.9.26 360笔试第二题

题目大意给出一个带权无向图,没有自环和重边,给出两个节点s和t,求从s到达t的路径中的所有边里,边权最大的边的权至少有多大。保证s与t连通。用例以n(节点个数)、m(边数)、s、t,然后m行u、v、w(权的大小)给出,比如:5 6 1 51 5 1001 2 102 5 51 3 33 4 24 5 1选择从1->3->4->5的路径,经过3条w分别为3、2、1的边,因此答案为3。如果选择1->5或1->2->5则最大边权分别为100和10,都比3大。

2020-09-27 02:05:18 555

原创 单调栈问题合集

接雨水class Solution { public int trap(int[] height) { int ans = 0; int n = height.length,mmin; Stack<Integer> st = new Stack<Integer>(); int pos = 0,width,curh; for(int i = 0;i < n;i++){

2020-09-26 17:26:22 179

原创 柱状图中最大的矩形---从暴力到单调栈优化

题目链接:柱状图中最大的矩形题目描述:给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。求在该柱状图中,能够勾勒出来的矩形的最大面积。以上是柱状图的示例,其中每个柱子的宽度为 1,给定的高度为 [2,1,5,6,2,3]。图中阴影部分为所能勾勒出的最大矩形面积,其面积为 10 个单位。示例:输入: [2,1,5,6,2,3]输出: 10题目分析:矩形的面积是由宽度和高度共同决定的,因此我们可以通过枚举这两个值来求最大值。假如就选择高度好了,对于每个

2020-09-25 20:39:29 214

原创 岛屿问题合集

题目链接:岛屿数量题目描述:给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围。示例 1:输入:[[‘1’,‘1’,‘1’,‘1’,‘0’],[‘1’,‘1’,‘0’,‘1’,‘0’],[‘1’,‘1’,‘0’,‘0’,‘0’],[‘0’,‘0’,‘0’,‘0’,‘0’]]输出: 1示例 2:输入:[[‘1’,‘1’,‘0’

2020-09-25 01:54:44 643

原创 判断二叉树是否为搜索二叉树和完全二叉树。

题目描述给定一棵二叉树,已经其中没有重复值的节点,请判断该二叉树是否为搜索二叉树和完全二叉树。示例1输入复制{2,1,3}输出复制[true,true]备注:n≤500000分析:BST特点:左子值比根节点小,右子值比根节点大完全二叉树特点:每一层节点按照从左到右的顺序存放,每一层必须放满才可以放下一层,比如下图两种就属于不合法的完全二叉树基于上述特点,我们可以写出代码:import java.util.*;/* * public class TreeNode { *

2020-09-24 15:55:19 367

原创 求解集合的子集

题目描述现在有一个没有重复元素的整数集合S,求S的所有子集注意:你给出的子集中的元素必须按升序排列给出的解集中不能出现重复的元素例如:如果S=[1,2,3], 给出的解集应为:[[3],[1],[2],[1,2,3],[1,3],[2,3],[1,2],[]]分析:我们知道一个n个元素的集合的子集个数为2的n次幂减一,利用二进制的思想,我们可以将个数转换为二进制同时再映射到集合中的元素,比如题目的[1,2,3]一共有2^3-1=7种可能,将0-7分别转换成二进制[0,0,

2020-09-24 14:44:44 492

原创 重复的子字符串--kmp解法

题目链接:重复的子字符串题目描述:给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成。给定的字符串只含有小写英文字母,并且长度不超过10000。示例 1:输入: “abab”输出: True解释: 可由子字符串 “ab” 重复两次构成。示例 2:输入: “aba”输出: False示例 3:输入: “abcabcabcabc”输出: True解释: 可由子字符串 “abc” 重复四次构成。 (或者子字符串 “abcabc” 重复两次构成。)解题思路如果您的字符串 S

2020-09-22 16:34:46 626

转载 差分数组---区间修改

什么是差分数组问题背景如果给你一个包含5000万个元素的数组,然后会有频繁区间修改操作,那什么是频繁的区间修改操作呢?比如让第1个数到第1000万个数每个数都加上1,而且这种操作时频繁的。此时你应该怎么做?很容易想到的是,从第1个数开始遍历,一直遍历到第1000万个数,然后每个数都加上1,如果这种操作很频繁的话,那这种暴力的方法在一些实时的系统中可能就拉跨了。因此,今天的主角就出现了——差分数组。算法原型比如我们现在有一个数组arr,arr={0,2,5,4,9,7,10,0}那么差分数组是

2020-09-22 14:12:28 1112

原创 2021度小满9.20编程笔试

第一题涂色很简单,就是个简单的模拟说说第二题吧,经典走迷宫问题,就是遇到*步数加一,遇到.直接前进,遇到#无法前进,只要走到四个边缘之一就算走出迷宫,问最小步数。这题暴力dfs会超时,也就过个9%…利用记忆化搜索加剪枝即可,贴个代码吧import java.util.*;public class Main { static Scanner in = new Scanner(System.in); static int n,m,ans ; static char[][] m

2020-09-20 22:16:03 433 2

原创 443. 压缩字符串

题目链接:压缩字符串题目描述:给定一组字符,使用原地算法将其压缩。压缩后的长度必须始终小于或等于原数组长度。数组的每个元素应该是长度为1 的字符(不是 int 整数类型)。在完成原地修改输入数组后,返回数组的新长度。进阶:你能否仅使用O(1) 空间解决问题?示例 1:输入:[“a”,“a”,“b”,“b”,“c”,“c”,“c”]输出:返回 6 ,输入数组的前 6 个字符应该是:[“a”,“2”,“b”,“2”,“c”,“3”]说明:“aa” 被 “a2” 替代。“bb” 被 “

2020-09-17 18:48:37 203

原创 求解方程

题目链接:求解方程题目描述:求解一个给定的方程,将x以字符串"x=#value"的形式返回。该方程仅包含’+’,’ - '操作,变量 x 和其对应系数。如果方程没有解,请返回“No solution”。如果方程有无限解,则返回“Infinite solutions”。如果方程中只有一个解,要保证返回值 x 是一个整数。示例 1:输入: “x+5-3+x=6+x-2”输出: “x=2”示例 2:输入: “x=x”输出: “Infinite solutions”示例 3:输入: “2x

2020-09-17 01:00:49 286

原创 划分字母区间

题目链接:划分字母区间代码:class Solution { public List<Integer> partitionLabels(String S) { int[] last = new int[26]; for (int i = 0; i < S.length(); ++i) last[S.charAt(i) - 'a'] = i; int j = 0, anchor = 0;

2020-09-16 23:13:10 151

原创 删除排序链表中的重复元素

题目链接:删除链表中的重复节点分析:有序链表,双指针/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */class Solution { public ListNode deleteDuplicates(ListNode head) {

2020-09-16 20:41:34 161

原创 820. 单词的压缩编码

题目链接:单词的压缩编码分析:利用字典树建立一棵后缀树,然后统计存在于字典树上的单词即可,需要注意的一个点是先插入长度大的单词,这样当它的后缀出现时我们才能进行排除class Solution { public int minimumLengthEncoding(String[] words) { int len = 0; Trie trie = new Trie(); Arrays.sort(words, (s1, s2) -> s2.le

2020-09-16 16:18:05 183

原创 链表求和

题目链接:链表求和题目描述:示例:输入:(7 -> 1 -> 6) + (5 -> 9 -> 2),即617 + 295输出:2 -> 1 -> 9,即912进阶:假设这些数位是正向存放的,请再做一遍。示例:输入:(6 -> 1 -> 7) + (2 -> 9 -> 5),即617 + 295输出:9 -> 1 -> 2,即912分析:主要是这个while的判断条件写的很棒,省去了很多判断细节,比如一个链表遍历完,最后

2020-09-16 13:23:14 163

原创 复杂链表的复制

题目链接:复杂链表的复制题目描述:请实现 copyRandomList 函数,复制一个复杂链表。在复杂链表中,每个节点除了有一个 next 指针指向下一个节点,还有一个 random 指针指向链表中的任意节点或者 null。示例 1:输入:head = [[7,null],[13,0],[11,4],[10,2],[1,0]]输出:[[7,null],[13,0],[11,4],[10,2],[1,0]]示例 2:输入:head = [[1,1],[2,1]]输出:[[1,1],[2

2020-09-16 12:32:39 161

原创 N进制加法的实现

根据十进制加法的原理,我们实现N进制的加法依旧是从末位开始逐位相加,并累加进位class Solution { static Scanner in = new Scanner(System.in); static String addByJinzhi(String a, String b,int jizhi) { StringBuffer ans = new StringBuffer(); int n = Math.max(a.length(), b.l

2020-09-14 12:57:37 1063

原创 腾讯后台二面面经

由于一面之后将近一周没有消息,于是急躁的我打电话催了hr,结果,下午六点多就打来了电话,大约半个小时的电话面试,一切都很快,面的很快????灰的很快,我恨自己去催HR,这简直是作死行为,因为我告诉HR时间紧张,所以可能直接找了个级别比较高的大佬来电面,行吧,说到底还是我过于自信。。。。,嗯,随便回忆一下面试内容吧自我介绍介绍实习做的工作,根据实习项目深挖TCP面向流的概念如何理解,如何保证有序性,如何交付给应用层虚拟内存相关mysql长查询如何解决最近在干什么学什么反问时间很短,没做笔试,感

2020-08-31 10:42:32 430

原创 京东2021秋招笔试题

8.27晚 19点到21点30个选择 2道编程做完才发现 选择题和编程题3:2,我飞快的做完了选择题…,分数比编程还高…2道编程题都不难第一题:让你求有且仅有数字2,3,5组成的数字,输入N,输出所有组成的数中第N大的数暴力回溯AC100%代码:import java.util.*;public class Main{ static Scanner in = new Scanner(System.in); static int[] a = {2,3,5}; stat

2020-08-28 15:56:52 1847 1

原创 腾讯笔试题---假期

题目描述:链接:https://www.nowcoder.com/questionTerminal/7cd9a140387e455a972e8fea0e74be2c?f=discussion来源:牛客网由于业绩优秀,公司给小Q放了 n 天的假,身为工作狂的小Q打算在在假期中工作、锻炼或者休息。他有个奇怪的习惯:不会连续两天工作或锻炼。只有当公司营业时,小Q才能去工作,只有当健身房营业时,小Q才能去健身,小Q一天只能干一件事。给出假期中公司,健身房的营业情况,求小Q最少需要休息几天。输入描述:

2020-08-26 19:48:01 408

原创 二叉搜索树的范围和

题目链接:二叉树的范围和题目描述:给定二叉搜索树的根结点 root,返回 L 和 R(含)之间的所有结点的值的和。二叉搜索树保证具有唯一的值。示例 1:输入:root = [10,5,15,3,7,null,18], L = 7, R = 15输出:32示例 2:输入:root = [10,5,15,3,7,13,18,1,null,6], L = 6, R = 10输出:23提示:树中的结点数量最多为 10000 个。最终的答案保证小于 2^31。题目分析:根据BST的特点,左子

2020-08-26 16:50:19 223

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

题目链接:倒数第K个节点题目描述:输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。例如,一个链表有6个节点,从头节点开始,它们的值依次是1、2、3、4、5、6。这个链表的倒数第3个节点是值为4的节点。示例:给定一个链表: 1->2->3->4->5, 和 k = 2.返回链表 4->5.题目分析:双指针,使用2个指针保持K的间距,当一个节点达到链表末尾时,另一个节点即倒数第K个节点代码:clas

2020-08-26 12:13:49 92

原创 Offer 27. 二叉树的镜像

题目链接:二叉树的镜像题目描述:请完成一个函数,输入一个二叉树,该函数输出它的镜像。例如输入: 4/ 2 7/ \ / 1 3 6 9镜像输出: 4/ 7 2/ \ / 9 6 3 1示例 1:输入:root = [4,2,7,1,3,6,9]输出:[4,7,2,9,6,3,1]代码:递归方式:class Solution { public TreeNode mirrorTree(TreeNode root)

2020-08-26 12:08:42 99

原创 两个链表的第一个公共节点

今天七夕啦啦啦啦,作为单身狗,我决定送自己一个链表相交题,真是惨绝人寰,相互平行的链表都能浪漫相遇哦~题目链接:链表相交题目描述:输入两个链表,找出它们的第一个公共节点。如下面的两个链表:在节点 c1 开始相交。题目分析:暴力直接遍历,找到相交的点即可public class Solution { public ListNode getIntersectionNode(ListNode headA, ListNode headB) { int len1 = 0,

2020-08-25 14:38:22 157

原创 腾讯后台开发一面面经

8.22晚开始的面试,其实我确实没有怎么准备QAQ,比较菜上来先是做了2个代码题,然后由于我之前很少用牛客网的代码编辑器做过题,刷leetcode习惯了,代码倒是特别快的写完了,但是一直特别蠢的在搞编译错误问题,后来刚搞好,我的网断了!是的,你没听错,网整个断掉了!然后,面试官给我打来了电话,开始了漫长的电话面试我忽然发现,我快忘完了,因为面试完我就放飞了设计模式,随口说了一句单例模式,聊了好久好久单例的doubleCheck,中间涉及到加锁和类加载过程数据库分库分表,分库分表的概念,中间会出情景

2020-08-24 20:11:45 322

原创 剑指 Offer 48. 最长不含重复字符的子字符串

题目链接:不含重复字符的最长子串题目描述:请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。示例 1:输入: “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。示例 2:输入: “bbbbb”输出: 1解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。示例 3:输入: “pwwkew”输出: 3解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。请注意,你的答案必须是 子串 的长

2020-08-19 19:59:34 174

原创 归并/快速/堆/插入排序--Java实现

复习这几种排序的写法以及过程import java.util.*;public class Main { static Scanner in = new Scanner(System.in); static int ans = 0,n; static int[] a = new int[10005]; static void mergesort(int l,int r,int[] t){ if(r-l>1){ int m =

2020-08-07 15:05:50 144

原创 区间能交错的最大数--贪心

类似题目:假设要在足够多的会场里安排一批活动,并希望使用尽可能少的会场。设计一个有效的贪心算法进行安排。输入格式:第一行有 1 个正整数k,表示有 k个待安排的活动。接下来的 k行中,每行有 2个正整数,分别表示 k个待安排的活动开始时间和结束时间。时间以 0 点开始的分钟计。输出格式:输出最少会场数题目分析:把每场会议的时间段映射到枢轴上的一段区间,那么求解最小的会议场数就转换成了求解数轴上所有区间里面,有交错的区间里面交错数最多的那个,如下图所示,最多为3,也可以理解为用一条直线去平移,最

2020-08-05 12:32:28 420

原创 经典进程同步问题

经典同步问题生产者和消费者问题前面已经讨论过了。1. 哲学家进餐问题五个哲学家围着一张圆桌,每个哲学家面前放着食物。哲学家的生活有两种交替活动:吃饭以及思考。当一个哲学家吃饭时,需要先拿起自己左右两边的两根筷子,并且一次只能拿起一根筷子。下面是一种错误的解法,如果所有哲学家同时拿起左手边的筷子,那么所有哲学家都在等待其它哲学家吃完并释放自己手中的筷子,导致死锁。#define N 5void philosopher(int i) { while(TRUE) {..

2020-08-04 17:58:14 211

原创 进程调度算法小结

不同环境的调度算法目标不同,因此需要针对不同环境来讨论调度算法。1.批处理系统批处理系统没有太多的用户操作,在该系统中,调度算法目标是保证吞吐量和周转时间(从提交到终止的时间)。1.1 先来先服务 first-come first-serverd(FCFS)非抢占式的调度算法,按照请求的顺序进行调度。有利于长作业,但不利于短作业,因为短作业必须一直等待前面的长作业执行完毕才能执行,而长作业又需要执行很长时间,造成了短作业等待时间过长。1.2 短作业优先 shortest job fi

2020-08-04 17:10:24 835

原创 29. 两数相除

题目链接:两数相除题目描述:给定两个整数,被除数 dividend 和除数 divisor。将两数相除,要求不使用乘法、除法和 mod 运算符。返回被除数 dividend 除以除数 divisor 得到的商。整数除法的结果应当截去(truncate)其小数部分,例如:truncate(8.345) = 8 以及 truncate(-2.7335) = -2示例 1:输入: dividend = 10, divisor = 3输出: 3解释: 10/3 = truncate(3.33333…

2020-07-31 22:14:05 175

原创 实现 strStr()---字符串匹配的三种解法

题目链接:实现strstr()题目描述:实现 strStr() 函数。给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。示例 1:输入: haystack = “hello”, needle = “ll”输出: 2示例 2:输入: haystack = “aaaaa”, needle = “bba”输出: -1题目分析:字符串匹配是一道很经典的题目,除了暴力匹

2020-07-30 16:31:18 436

原创 整数拆分

题目链接:整数拆分题目描述:给定一个正整数 n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化。 返回你可以获得的最大乘积。示例 1:输入: 2输出: 1解释: 2 = 1 + 1, 1 × 1 = 1。示例 2:输入: 10输出: 36解释: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36。说明: 你可以假设 n 不小于 2 且不大于 58。题目分析:拆分存在很多种组合,又求最大值,用Dp做。每个数组合时分为拆与不拆两个状态。代码:class Soluti

2020-07-30 11:00:36 384

原创 25. K 个一组翻转链表

题目链接:K个一组反转链表题目描述:给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。示例:给你这个链表:1->2->3->4->5当 k = 2 时,应当返回: 2->1->4->3->5当 k = 3 时,应当返回: 3->2->1->4->5题目分析:在单链表反转的基础上,每K个进行反转

2020-07-29 16:00:26 133

原创 合并K个排序链表

题目链接:合并K个排序链表题目描述:合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。示例:输入:[1->4->5,1->3->4,2->6]输出: 1->1->2->3->4->4->5->6题目分析:基于合并2个有序链表的过程,合并K个链表,最简单的方式就是,将K个链表进行K-1次合并(每次合并2个,并保留上一次合并的结果进行下一次合并),这个时间复杂度是O(n2),寻求更低的时间复杂度是我

2020-07-28 11:47:09 146

空空如也

空空如也

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

TA关注的人

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