![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
LeetCode
菜瓜_牛顿
枪如惊雷,照一身肝胆
展开
-
*二叉树的右视图
给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。思路右视图: 层次遍历,每一层的最后一个节点左视图:层次遍历,每一层的第一个节点层次遍历就是用Queue/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * Tree原创 2021-08-18 15:46:17 · 309 阅读 · 0 评论 -
*复杂链表的复制
复杂链表的复制输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的 head 。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)思路循环遍历复制每个节点A的A1,把A1插入在A后边, (先不管random)处理random指针,对于有random指针的节点(cursor.next.random = cursor.random.next)链表拆分public class HydraTest原创 2021-08-17 14:30:23 · 206 阅读 · 0 评论 -
*目录的最大深度
给定一个文件目录,求这个目录下的最大深度import java.io.File;import java.io.IOException;import org.apache.commons.collections4.CollectionUtils;import org.apache.commons.lang3.StringUtils;import com.google.common.base.Splitter;public class HydraTest { private s原创 2021-08-17 11:28:32 · 248 阅读 · 0 评论 -
几种基本排序算法的实现
package test.sort;import org.junit.Test;/** @Author lingl @Date 2020/4/16 */public class SortTest { @Test public void test() { int[] array = new int[] {5, 3, 4, 1, 3, 6, 2}; quickSo...原创 2020-04-16 15:38:26 · 214 阅读 · 0 评论 -
*线程交替打印
交替打印三线程交替打印abc两种方案synchronized + wait + notifyReentrantLock + conditionSemaphore public static class ABC { private int num; private static final String LOCK = "lock"; public void print(int targetNum) { syn原创 2021-08-11 18:45:00 · 167 阅读 · 0 评论 -
* 215 数组中的第K大元素
在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。示例 1:输入: [3,2,1,5,6,4] 和 k = 2输出: 5示例2:输入: [3,2,3,1,2,4,5,5,6] 和 k = 4输出: 4说明:你可以假设 k 总是有效的,且 1 ≤ k ≤ 数组的长度。思路:第K大 = 第N-K小 快排优化 private int[] nums; public int findKthLarge.原创 2020-06-16 16:06:45 · 154 阅读 · 0 评论 -
*二叉树路径和
124 二叉树中的最大路径和给定一个非空二叉树,返回其最大路径和。本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列。该路径至少包含一个节点,且不一定经过根节点。示例 1:输入: [1,2,3] 1 / \ 2 3输出: 6示例2:输入: [-10,9,20,null,null,15,7] -10/ \9 20/ \15 7输出: 42思路:回溯class Solu...原创 2020-06-12 14:19:56 · 612 阅读 · 0 评论 -
*零钱兑换
给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回-1。思路:动态规划public class Solution { public int coinChange(int[] coins, int amount) { int max = amount + 1; int[] dp = new int[amount + 1]; Arrays.fill(dp, max);.原创 2020-06-07 14:42:43 · 150 阅读 · 0 评论 -
165比较版本号
比较两个版本号 version1和 version2。如果version1>version2返回1,如果version1<version2 返回 -1, 除此之外返回 0。你可以假设版本字符串非空,并且只包含数字和. 字符。. 字符不代表小数点,而是用于分隔数字序列。例如,2.5 不是“两个半”,也不是“差一半到三”,而是第二版中的第五个小版本。你可以假设版本号的每一级的默认修订版号为 0。例如,版本号 3.4 的第一级(大版本)和第二级(小版本)修订号分...原创 2020-05-27 15:48:15 · 158 阅读 · 0 评论 -
*148排序链表
在O(nlogn) 时间复杂度和常数级空间复杂度下,对链表进行排序。示例 1:输入: 4->2->1->3输出: 1->2->3->4示例 2:输入: -1->5->3->4->0输出: -1->0->3->4->5思路:归并排序 快慢指针拆成两个列表 merge过程 就是 两个有序链表排序public ListNode sortList(ListNode head) { i...原创 2020-05-27 15:14:15 · 169 阅读 · 0 评论 -
202.快乐数
编写一个算法来判断一个数 n 是不是快乐数。「快乐数」定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果 可以变为1,那么这个数就是快乐数。如果 n 是快乐数就返回 True ;不是,则返回 False 。示例:输入:19输出:true解释:12 + 92 = 8282 + 22 = 6862 + 82 = 10012 + 02 + 02 = 1思路:快慢指针p...原创 2020-05-27 14:32:42 · 106 阅读 · 0 评论 -
*236.二叉树最近公共祖先
给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉树:root =[3,5,1,6,2,0,8,null,null,7,4]示例 1:输入: root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1输出: 3解释: 节点 5 ...原创 2020-05-27 13:32:28 · 169 阅读 · 0 评论 -
*53.最大子序和
给定一个整数数组 nums,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4],输出: 6解释:连续子数组[4,-1,2,1] 的和最大,为6。进阶:如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解。思路:动态规划 res [ i ] 以 num [ i ] 结尾的 最大子序和public int maxSubArray(int[] nums) { if (...原创 2020-05-26 17:58:50 · 93 阅读 · 0 评论 -
155.最小栈
设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。push(x) —— 将元素 x 推入栈中。pop()—— 删除栈顶的元素。top()—— 获取栈顶元素。getMin() —— 检索栈中的最小元素。示例:输入:["MinStack","push","push","push","getMin","pop","top","getMin"][[],[-2],[0],[-3],[],[],[],[]]输出:[null,null,null,nu...原创 2020-05-26 17:23:56 · 181 阅读 · 0 评论 -
*LRU缓存机制
运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制。它应该支持以下操作: 获取数据 get 和 写入数据 put 。获取数据 get(key) - 如果密钥 (key) 存在于缓存中,则获取密钥的值(总是正数),否则返回 -1。 写入数据 put(key, value) - 如果密钥不存在,则写入其数据值。当缓存容量达到上限时,它应该在写入新数据之前删除最近最少使用的数据值,从而为新的数据值留出空间。进阶:你是否可以在 O(1) 时间复杂度内完成这两种操作?示例:原创 2020-05-26 17:11:15 · 129 阅读 · 0 评论 -
接雨水
给定n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。感谢 Marcos 贡献此图。示例:输入: [0,1,0,2,1,0,1,3,2,1,2,1]输出: 6来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/trapping-rain-water著..原创 2020-05-26 15:45:20 · 105 阅读 · 0 评论 -
*50.pow(x, n)
实现pow(x, n),即计算 x 的 n 次幂函数。示例 1:输入: 2.00000, 10输出: 1024.00000示例2:输入: 2.10000, 3输出: 9.26100示例3:输入: 2.00000, -2输出: 0.25000解释: 2-2 = 1/22 = 1/4 = 0.25说明:-100.0 <x< 100.0n是 32 位有符号整数,其数值范围是[−231,231− 1] 。思路:快速幂 public do...原创 2020-05-26 15:33:05 · 181 阅读 · 0 评论 -
x的平方根
实现int sqrt(int x)函数。计算并返回x的平方根,其中x 是非负整数。由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。示例 1:输入: 4输出: 2示例 2:输入: 8输出: 2说明: 8 的平方根是 2.82842..., 由于返回类型是整数,小数部分将被舍去。思路:二分法 public int mySqrt(int x) { // 二分查找 int left = 0; int right...原创 2020-05-21 19:05:51 · 173 阅读 · 0 评论 -
*UTF-8编码验证
UTF-8 中的一个字符可能的长度为 1 到 4 字节,遵循以下的规则:对于 1 字节的字符,字节的第一位设为0,后面7位为这个符号的unicode码。对于 n 字节的字符 (n > 1),第一个字节的前 n 位都设为1,第 n+1 位设为0,后面字节的前两位一律设为10。剩下的没有提及的二进制位,全部为这个符号的unicode码。这是 UTF-8 编码的工作方式: Char. number range | UTF-8 octet sequence (hex...原创 2020-05-21 17:28:45 · 375 阅读 · 0 评论 -
一些智力题
(1)你要在一个nxm的格子图上涂色,你每次可以选择一个未涂色的格子涂上你开始选定的那种颜色。同时为了美观,我们要求你涂色的格子不能相邻,也就是说,不能有公共边,现在问你,在采取最优策略的情况下,你最多能涂多少个格子?给定格子图的长n和宽m。请返回最多能涂的格子数目。思路:按照对角线涂色,可知格子的一半能够涂上颜色。public class Paint {原创 2017-07-19 09:20:13 · 760 阅读 · 0 评论 -
复杂链表的赋值
链表结构中,每个节点不仅有一条指向下一节点的next指针,同时含有一条rand指针,rand指针可能指向任何一个链表中的节点,请复制这种含有rand指针节点的链表。 方法1.创建一个没有rand时与复杂链表完全相同的链表,然后遍历原链表,给新链表rand复制。方法2.原创 2017-07-14 16:01:40 · 1446 阅读 · 0 评论 -
*回文链表的判断
题目:如1->2->3->2->1是回文,1->2->3->1不是思路:1.时间复杂度O(n),n个额外空间使用栈Stack,将链表节点从头至尾入栈。然后栈顶和链表元素依次比对,如果节点相同则是回文的。public class Palindrome { public boolean isPalindrome(ListNode pHead) { //原创 2017-07-14 10:30:50 · 318 阅读 · 0 评论 -
字符串相关练习题目
一、字符串问题总结:(1)字符串可以看成字符数组,那么(2)回文字符串(3)大数相加减乘除(4)数组有关的调整、排序(快排划分技巧):(5)字符计数(哈希表 固定长度数组)滑动窗口、寻找无重复字符子串、计算变为词C++字符是0~255,java 是0~65535(6)动态规划:最长公共子串、最长公共子序列、最长回文子串、最长回文子序列(7)搜索类型(str每次只能变原创 2017-07-10 10:46:11 · 1479 阅读 · 0 评论 -
原地重复值判断
题目:请设计一个高效算法,判断数组中是否有重复值。必须保证额外空间复杂度为O(1)。给定一个int数组A及它的大小n,请返回它是否有重复值。思路:先将数组原地排序,然后查看是否有相邻元素值相同。那么能够实现原地排序且时间复杂度小的是 非递归的堆排序。时间复杂度O(nlogn)空间复杂度O(1)public class Checker { publ原创 2017-07-06 09:59:14 · 208 阅读 · 0 评论 -
树中两个节点的最低公共祖先(Java实现)
题目:求树中两个结点的最低公共祖先分析:其实这是一组题目,考官没有说清楚树的结构,那么做法就不尽相同。比如,如果是二叉搜索树的话,我们只需从根结点判断,如果二结点与根的左右子树比较一大一小,那么跟结点就是二者最低公共祖先;如果二结点都比左子结点小,向左子树递归进行比较;如果二结点都比右子树结点大,向右子树递归进行比较;如果不是二叉搜索树,但带有指向父节点的指针,那么此题转换转载 2017-08-30 21:26:38 · 1188 阅读 · 0 评论 -
二叉树递归练习
(1)题目:请把纸条竖着放在桌面上,然后从纸条的下边向上⽅对折,压出折痕后再展开。此时有1条折痕,突起的⽅向指向纸条的背面,这条折痕叫做“下”折痕 ;突起的面向指向纸条正⾯的折痕叫做“上”折痕。如果每次都从下边向上面对折,对折N次。请从上到下计算出所有折痕的面向。给定折的次数n,请返回从上到下的折痕的数组,若为下折痕则对应元素为"down",若为上折痕则为"up".思路:找原创 2017-07-17 16:59:42 · 776 阅读 · 0 评论 -
相邻两数最大差值
有一个整形数组A,请设计一个复杂度为O(n)的算法,算出排序后相邻两数的最大差值。给定一个int数组A和A的大小n,请返回最大的差值。保证数组元素多于1个。 思路:用排序法实现,其时间复杂度为O(NlogN),而如果利用桶排序的思想可以做到O(N),空间复杂度为O(N)。遍历arr找到最大值max和最小值min。如果arr的长度为N,准备N+1个桶,把max单独放在第N+1个桶中,原创 2017-07-08 09:13:05 · 1364 阅读 · 0 评论 -
最短子数组
题目:对于一个数组,请设计一个高效算法计算需要排序的最短子数组的长度。给定一个int数组A和数组的大小n,请返回一个二元组,代表所求序列的长度。(原序列位置从0开始标号,若原序列有序,返回0)。保证A中元素均为正整数。测试样例:[1,4,6,5,9,10],6返回:21.给定一个无序数组,求出需要排序的最短子数组的长度。例如:arr={1,5,3原创 2017-07-07 09:34:47 · 510 阅读 · 0 评论 -
荷兰国旗/三色排序
1.荷兰国旗问题:数组只包含0,1,2对其排序(1)首先最简单的就是计数排序,当然这里不讨论,一般情况下考察的都不是这个(2)和快排划分过程相似:时间O(n),空间O(1)。快排划分的时候有个标志位 i=left-1,如果a[j]>x,j++,i++否则j++,,i++,a[j] a[i]互换位置.而该题目可以设置两个标志位,i,j,一个在最左边一个在最右边。对于数组a[0~n-1],原创 2017-07-06 11:18:50 · 393 阅读 · 0 评论 -
有序数组合并
有两个从小到大排序以后的数组A和B,其中A的末端有足够的缓冲空容纳B。请编写一个方法,将B合并入A并排序。给定两个有序int数组A和B,A中的缓冲空用0填充,同时给定A和B的真实大小int n和int m,请返回合并后的数组。public class Merge { public int[] mergeAB(int[] a, int[] b, int n, in原创 2017-07-06 10:06:41 · 201 阅读 · 0 评论 -
151.翻转字符串里的单词
151.翻转字符串里的单词给定一个字符串,逐个翻转字符串中的每个单词。示例 1:输入: "the sky is blue"输出: "blue is sky the"说明:无空格字符构成一个单词。 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。 如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。思想:先整体翻转一遍 在逐个单词翻转 去除多余空格class Solution { public String reverseWo原创 2020-05-09 20:35:09 · 109 阅读 · 0 评论 -
字符串相乘
43.字符串相乘给定两个以字符串形式表示的非负整数num1和num2,返回num1和num2的乘积,它们的乘积也表示为字符串形式。示例 1:输入: num1 = "2", num2 = "3"输出: "6"num1 和 num2 的长度小于110。 num1 和 num2 只包含数字 0-9。 num1 和 num2 均不以零开头,除非是数字 0 本身。 不能使用任何标准库的大数类型(比如 BigInteger)或直接将输入转换为整数来处理。思想:第i和j 位...原创 2020-05-09 17:57:15 · 747 阅读 · 0 评论 -
4.寻找两个正序数组的中位数
4.寻找两个正序数组的中位数给定两个大小为 m 和 n 的正序(从小到大)数组nums1 和nums2。请你找出这两个正序数组的中位数,并且要求算法的时间复杂度为O(log(m + n))。你可以假设nums1和nums2不会同时为空。示例 1:nums1 = [1, 3]nums2 = [2]则中位数是 2.0示例 2:nums1 = [1, ...原创 2020-05-07 11:51:58 · 2760 阅读 · 0 评论 -
* 只出现一次的数字
136.只出现一次的数字给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?示例 1:输入: [2,2,1]输出: 1示例2:输入: [4,1,2,1,2]输出: 4思想:位运算 异或运算public int singleNumber...原创 2020-05-06 17:57:33 · 273 阅读 · 0 评论 -
*链表相关题目
61.旋转链表给定一个链表,旋转链表,将链表每个节点向右移动k个位置,其中k是非负数。示例1:输入: 1->2->3->4->5->NULL, k = 2输出: 4->5->1->2->3->NULL解释:向右旋转 1 步: 5->1->2->3->4->NULL向右旋转 2 步...原创 2020-05-03 19:47:07 · 211 阅读 · 0 评论 -
回文
5.最长回文子串给定一个字符串 s,找到 s 中最长的回文子串。你可以假设s 的最大长度为 1000。示例 1:输入: "babad"输出: "bab"注意: "aba" 也是一个有效答案。示例 2:输入: "cbbd"输出: "bb"思想:动态规划 空间换时间,初始值,方程 boolean dp[ l ][ r ] 表示字符串从 i 到 j 这段是否为回...原创 2020-05-02 18:15:38 · 311 阅读 · 0 评论 -
*买股票问题
63.股票的最大利润假设把某股票的价格按照时间先后顺序存储在数组中,请问买卖该股票一次可能获得的最大利润是多少?示例 1:输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。 注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格。示例 ...原创 2020-04-29 15:54:16 · 278 阅读 · 0 评论 -
*整数反转
7.整数反转给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。示例1:输入: 123输出: 321示例 2:输入: -123输出: -321示例 3:输入: 120输出: 21注意:假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为[−231,231− 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。思...原创 2020-04-29 14:14:12 · 189 阅读 · 0 评论 -
两数相加_字符串相乘
2.两数相加给出两个非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储一位数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7...原创 2020-04-28 15:30:32 · 426 阅读 · 0 评论 -
二叉树打印
题目:有一棵二叉树,请设计一个算法,按照层次打印这棵二叉树。给定二叉树的根结点root,请返回打印结果,结果按照每一层一个数组进行储存,所有数组的顺序按照层数从上往下,且每一层的数组内元素按照从左往右排列。保证结点数小于等于500。 public int[][] printTree(BTree root){ if(root==null) return null;原创 2017-07-03 09:00:37 · 239 阅读 · 0 评论