Leetcode
Leetcode算法题解答,主要语言为java。
RyanCYK
Done is better than perfect.
展开
-
算法 |《剑指offer》面试题53-1. 在排序数组中查找数字
统计一个数字在排序数组中出现的次数。示例 1:输入: nums = [5,7,7,8,8,10], target = 8输出: 2示例 2:输入: nums = [5,7,7,8,8,10], target = 6输出: 0限制:0 <= 数组长度 <= 50000题解:class Solution { public int search(int[] nums, int target) { if(nums == null || nums.length原创 2020-08-04 09:16:45 · 224 阅读 · 0 评论 -
算法 |《剑指offer》面试题60.n个骰子的点数
把n个骰子扔在地上,所有骰子朝上一面的点数之和为s。输入n,打印出s的所有可能的值出现的概率。你需要用一个浮点数数组返回答案,其中第 i 个元素代表这 n 个骰子所能掷出的点数集合中第 i 小的那个的概率。示例 1:输入: 1输出: [0.16667,0.16667,0.16667,0.16667,0.16667,0.16667]示例 2:输入: 2输出: [0.02778,0.05556,0.08333,0.11111,0.13889,0.16667,0.13889,0.11111,0.08原创 2020-07-23 17:02:50 · 226 阅读 · 0 评论 -
算法 |《剑指offer》面试题65.不用加减乘除做加法
写一个函数,求两个整数之和,要求在函数体内不得使用 “+”、“-”、“*”、“/” 四则运算符号。 示例:输入: a = 1, b = 1输出: 2提示:a, b 均可能是负数或 0结果不会溢出 32 位整数题解:class Solution { public int add(int a, int b) { //^ 亦或 ----相当于 无进位的求和, 想象10进制下的模拟情况:(如:19+1=20;无进位求和就是10,而非 //20;因为它不管进位情况)原创 2020-07-15 09:35:49 · 131 阅读 · 0 评论 -
算法 |《剑指offer》面试题40.最小的k个数
输入整数数组 arr ,找出其中最小的 k 个数。例如,输入4、5、1、6、2、7、3、8这8个数字,则最小的4个数字是1、2、3、4。示例 1:输入:arr = [3,2,1], k = 2输出:[1,2] 或者 [2,1]示例 2:输入:arr = [0,1,2,1], k = 1输出:[0]限制:0 <= k <= arr.length <= 100000 <= arr[i] <= 10000题解:class Solution { publi原创 2020-07-14 09:30:59 · 119 阅读 · 0 评论 -
算法 |《剑指offer》面试题66.构建乘积数组
给定一个数组 A[0,1,…,n-1],请构建一个数组 B[0,1,…,n-1],其中 B 中的元素 B[i]=A[0]×A[1]×…×A[i-1]×A[i+1]×…×A[n-1]。不能使用除法。示例:输入: [1,2,3,4,5]输出: [120,60,40,30,24]提示:所有元素乘积之和不会溢出 32 位整数a.length <= 100000题解:class Solution { public int[] constructArr(int[] a) {原创 2020-07-13 07:58:36 · 199 阅读 · 0 评论 -
算法 |《剑指offer》面试题 42. 连续子数组的最大和
输入一个整型数组,数组里有正数也有负数。数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。示例1:输入: nums = [-2,1,-3,4,-1,2,1,-5,4]输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。提示:1 <= arr.length <= 10^5-100 <= arr[i] <= 100题解:class Solution { public int maxSubArray(原创 2020-07-12 15:31:11 · 1333 阅读 · 0 评论 -
算法 |《剑指offer》面试题 50.第一个只出现一次的字符
在字符串 s 中找出第一个只出现一次的字符。如果没有,返回一个单空格。 s 只包含小写字母。示例:s = "abaccdeff"返回 "b"s = ""返回 " "限制:0 <= s 的长度 <= 50000题解:class Solution { public char firstUniqChar(String s) { for(int i = 0; i < s.length(); i++) { char tmp = s.c原创 2020-07-11 09:06:47 · 195 阅读 · 0 评论 -
算法 |《剑指offer》面试题62.圆圈中最后剩下的数字
0,1,n-1这n个数字排成一个圆圈,从数字0开始,每次从这个圆圈里删除第m个数字。求出这个圆圈里剩下的最后一个数字。例如,0、1、2、3、4这5个数字组成一个圆圈,从数字0开始每次删除第3个数字,则删除的前4个数字依次是2、0、4、1,因此最后剩下的数字是3。示例 1:输入: n = 5, m = 3输出: 3示例 2:输入: n = 10, m = 17输出: 2限制:1 <= n <= 10^51 <= m <= 10^6题解:class Solutio原创 2020-07-10 09:05:59 · 219 阅读 · 0 评论 -
算法 |《剑指offer》面试题52.两个链表的第一个公共节点
输入两个链表,找出它们的第一个公共节点。如下面的两个链表:在节点 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)。从各自的表头开始算起,链表 A 为 [4,1,8,4,5],链表 B 为 [5,0,1原创 2020-07-09 21:50:29 · 275 阅读 · 0 评论 -
算法 |《剑指offer》面试题 57. 和为s的两个数字
输入一个递增排序的数组和一个数字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]限制:1 <= nums.length <= 10^51 <= nums[i] <= 10^6题解原创 2020-07-08 10:24:25 · 157 阅读 · 0 评论 -
算法 |《剑指offer》面试题39.数组中出现次数超过一半的数字
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例 1:输入: [1, 2, 3, 2, 2, 2, 5, 4, 2]输出: 2限制:1 <= 数组长度 <= 50000题解:class Solution { public int majorityElement(int[] nums) { //需要的数字出现次数多于一半,那么排序后这个数字必定位于中间,复杂度为O(nlogn)原创 2020-07-07 18:21:03 · 159 阅读 · 0 评论 -
算法 |《剑指offer》面试题68-I.二叉搜索树的最近公共祖先
给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉搜索树: root = [6,2,8,0,4,7,9,null,null,3,5]示例 1:输入: root = [6,2,8,0,4,7,9,null,null,3,5], p = 2, q = 8输出: 6解释: 节点 2 和原创 2020-07-05 14:01:31 · 182 阅读 · 0 评论 -
算法 |《剑指offer》面试题68-II.二叉树的最近公共祖先
给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 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 和节点 1原创 2020-07-04 09:33:18 · 157 阅读 · 0 评论 -
算法 |《剑指offer》面试题54.二叉树的第k大节点
给定一棵二叉搜索树,请找出其中第k大的节点。示例 1:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-E4bqc8t7-1593774144938)(https://i.loli.net/2020/07/03/OX6EQdhoMpqClIa.png)]示例 2:限制:1 ≤ k ≤ 二叉搜索树元素个数题解:/** * Definition for a binary tree node. * public class TreeNode { * int原创 2020-07-03 19:03:46 · 153 阅读 · 0 评论 -
算法 |《剑指offer》面试题55-II.平衡二叉树
输入一棵二叉树的根节点,判断该树是不是平衡二叉树。如果某二叉树中任意节点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。示例 1:给定二叉树 [3,9,20,null,null,15,7]返回 true 。示例 2:给定二叉树 [1,2,2,3,3,null,null,4,4]返回 false 。限制:1 <= 树的结点个数 <= 10000题解:/** * Definition for a binary tree node. * public class T原创 2020-07-02 09:16:21 · 277 阅读 · 0 评论 -
算法 |《剑指offer》面试题55-I.二叉树的深度
输入一棵二叉树的根节点,求该树的深度。从根节点到叶节点依次经过的节点(含根、叶节点)形成树的一条路径,最长路径的长度为树的深度。例如:给定二叉树 [3,9,20,null,null,15,7],[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TUSpvJgW-1593652507255)(https://i.loli.net/2020/07/02/OtRnq9HImZpNBSc.png)]返回它的最大深度 3 。提示:节点总数 <= 10000题解:/**原创 2020-07-02 09:15:40 · 229 阅读 · 0 评论 -
算法 |《剑指offer》面试题34.二叉树中和为某一值的路径
输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径。从树的根节点开始往下一直到叶节点所经过的节点形成一条路径。示例:给定如下二叉树,以及目标和 sum = 22, 5 / \ 4 8 / / \ 11 13 4 / \ / \ 7 2 5 1返回:[[5,4,11,2],[5,8,4,5]]提示:节点总数 <= 10000题解:/原创 2020-06-27 13:10:00 · 150 阅读 · 0 评论 -
算法 |《剑指offer》面试题33.二叉搜索树的后序遍历序列
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回 true,否则返回 false。假设输入的数组的任意两个数字都互不相同。参考以下这颗二叉搜索树:示例 1:输入: [1,6,3,2,5]输出: false示例 2:输入: [1,3,2,6,5]输出: true提示:数组长度 <= 1000题解:class Solution { // 要点:二叉搜索树中根节点的值大于左子树中的任何一个节点的值,小于右子树中任何一个节点的值,子树也是 pu原创 2020-06-26 23:42:25 · 103 阅读 · 0 评论 -
算法 |《剑指offer》面试题32-III.从上到下打印二叉树
请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-urtu2CUp-1593082665517)(https://i.loli.net/2020/06/25/VLUvRWB5lYz3yji.png)]提示:节点总数 <= 1000题解:/** * Definition for a binary tree node.原创 2020-06-25 18:58:27 · 152 阅读 · 0 评论 -
算法 |《剑指offer》面试题32-II.从上到下打印二叉树
从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。提示:节点总数 <= 1000题解:/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Solution {原创 2020-06-24 06:42:23 · 134 阅读 · 0 评论 -
算法 | 《剑指offer》面试题32.从上到下打印二叉树
从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。例如:给定二叉树: [3,9,20,null,null,15,7],[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AOiB0FTo-1592873575630)(https://i.loli.net/2020/06/23/lJVRUYNK4CAbpiz.png)]返回:[3,9,20,15,7]提示:节点总数 <= 1000题解:/** * Definition for a bina原创 2020-06-23 08:53:19 · 129 阅读 · 0 评论 -
算法 |《剑指offer》面试题31.栈的压入、弹出序列
输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如,序列 {1,2,3,4,5} 是某栈的压栈序列,序列 {4,5,3,2,1} 是该压栈序列对应的一个弹出序列,但 {4,3,5,1,2} 就不可能是该压栈序列的弹出序列。示例 1:输入:pushed = [1,2,3,4,5], popped = [4,5,3,2,1]输出:true解释:我们可以按以下顺序执行:push(1), push(2), push(3), push(4)原创 2020-06-22 15:35:10 · 167 阅读 · 0 评论 -
算法 |《剑指offer》面试题30. 包含min函数的最小栈
定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。示例:MinStack minStack = new MinStack();minStack.push(-2);minStack.push(0);minStack.push(-3);minStack.min(); --> 返回 -3.minStack.pop();minStack.top(); --> 返回 0.minStack.m原创 2020-06-21 09:44:44 · 145 阅读 · 0 评论 -
算法 |《剑指offer》面试题29. 顺时针打印矩阵
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。示例 1:输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]输出:[1,2,3,6,9,8,7,4,5]示例 2:输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]输出:[1,2,3,4,8,12,11,10,9,5,6,7]限制:0 <= matrix.length <= 1000 <= matrix[i].length <= 100题原创 2020-06-20 11:18:47 · 990 阅读 · 0 评论 -
算法 |《剑指offer》面试题28. 对称的二叉树
请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。示例 1:输入:root = [1,2,2,3,4,4,3]输出:true示例 2:输入:root = [1,2,2,null,3,null,3]输出:false限制:0 <= 节点个数 <= 1000题解:/** * Definition for a binary tree node. * public class TreeNode { * int val; *原创 2020-06-19 09:36:56 · 176 阅读 · 0 评论 -
算法 |《剑指offer》面试题27. 二叉树的镜像
title: 《剑指offer》面试题27. 二叉树的镜像tags:JavaLeetcodecategories: algorithmdeclare: true请完成一个函数,输入一个二叉树,该函数输出它的镜像。例如输入: 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].原创 2020-06-18 11:39:31 · 149 阅读 · 0 评论 -
算法 | 《剑指offer》面试题26. 树的子结构
输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构)B是A的子结构, 即 A中有出现和B相同的结构和节点值。例如:给定的树 A: 3/ \4 5/ 1 2给定的树 B:4/1返回 true,因为 B 与 A 的一个子树拥有相同的结构和节点值。示例 1:输入:A = [1,2,3], B = [3,1]输出:false示例 2:输入:A = [3,4,5,1,2], B = [4,1]输出:true限制:0 <= 节点个数原创 2020-06-18 10:55:02 · 165 阅读 · 0 评论 -
算法 |《剑指offer》面试题25. 很两个排序的链表
输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。示例1:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4限制:0 <= 链表长度 <= 1000题解:/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; *原创 2020-06-10 16:09:20 · 291 阅读 · 0 评论 -
算法 | 《剑指offer》面试题24. 反转链表
定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL限制:0 <= 节点个数 <= 5000题解:/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next原创 2020-06-09 23:12:42 · 129 阅读 · 0 评论 -
算法 | 《剑指offer》面试题22. 链表中倒数第k个节点
输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。例如,一个链表有6个节点,从头节点开始,它们的值依次是1、2、3、4、5、6。这个链表的倒数第3个节点是值为4的节点。示例:给定一个链表: 1->2->3->4->5, 和 k = 2.返回链表 4->5.题解:/** * Definition for singly-linked list. * public class ListNode { *原创 2020-06-07 22:47:12 · 144 阅读 · 0 评论 -
算法 | 《剑指offer》面试题21. 调整数组顺序使奇数位于偶数前面
title: Leetcode 面试题21. 调整数组顺序使奇数位于偶数前面tags:JavaLeetcodecategories: algorithmdeclare: true输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。示例:输入:nums = [1,2,3,4]输出:[1,3,2,4]注:[3,1,2,4] 也是正确的答案之一。提示:1 <= nums.length <= 500001 .原创 2020-06-07 22:09:37 · 205 阅读 · 0 评论 -
算法 |《剑指offer》面试题20. 表示数值的字符串
请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100"、“5e2”、"-123"、“3.1416”、“0123"都表示数值,但"12e”、“1a3.14”、“1.2.3”、“±5”、"-1E-16"及"12e+5.4"都不是。题解:class Solution { public boolean isNumber(String s) { //正则表达式的使用 // s = s.trim(); // if(s == nul原创 2020-06-04 00:03:54 · 113 阅读 · 0 评论 -
算法 |《剑指offer》面试题19. 正则表达式匹配
请实现一个函数用来匹配包含’. ‘和’‘的正则表达式。模式中的字符’.‘表示任意一个字符,而’'表示它前面的字符可以出现任意次(含0次)。在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"abaca"匹配,但与"aa.a"和"ab*a"均不匹配。示例 1:输入:s = "aa"p = "a"输出: false解释: "a" 无法匹配 "aa" 整个字符串。示例 2:输入:s = "aa"p = "a*" 输出: true 解释: 因为 '*' 代表原创 2020-06-02 08:51:59 · 232 阅读 · 0 评论 -
算法 | 《剑指offer》面试题 18. 删除链表的节点
给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。返回删除后的链表的头节点。示例 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,9]解释: 给定你链表中值为 1 的第三个节点,那么在调用了你的函数之后,该链表应变为 4 ->原创 2020-06-01 09:14:37 · 290 阅读 · 0 评论 -
算法 | 《剑指offer》面试题 17. 打印从1到最大的n位数
输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数 999。示例 1:输入: n = 1输出: [1,2,3,4,5,6,7,8,9]说明:用返回一个整数列表来代替打印n 为正整数题解:class Solution { public int[] printNumbers(int n) { int max = (int)Math.pow(10, n) - 1; int[] res = n原创 2020-05-29 11:24:20 · 148 阅读 · 0 评论 -
算法 | Leetcode 189 旋转数组
给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。示例 1:输入: [1,2,3,4,5,6,7] 和 k = 3输出: [5,6,7,1,2,3,4]解释:向右旋转 1 步: [7,1,2,3,4,5,6]向右旋转 2 步: [6,7,1,2,3,4,5]向右旋转 3 步: [5,6,7,1,2,3,4]示例 2:输入: [-1,-100,3,99] 和 k = 2输出: [3,99,-1,-100]解释:向右旋转 1 步: [99,-1,-100,3]向右旋原创 2020-05-29 10:44:52 · 138 阅读 · 0 评论 -
算法 | Leetcode 172 阶乘后的零
给定一个整数 n,返回 n! 结果尾数中零的数量。示例 1:输入: 3输出: 0解释: 3! = 6, 尾数中没有零。示例 2:输入: 5输出: 1解释: 5! = 120, 尾数中有 1 个零.题解: class Solution { public int trailingZeroes(int n) { int count = 0; //判断5的数量即可 while(n >= 5) { coun原创 2020-05-29 10:44:18 · 138 阅读 · 0 评论 -
算法 | Leetcode 160 相交链表
编写一个程序,找到两个单链表相交的起始节点。如下面的两个链表:在节点 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)。从各自的表头开始算起,链表 A 为 [4,1,8,4,5],链表 B 为 [5,0原创 2020-05-29 10:43:42 · 127 阅读 · 0 评论 -
算法 | Leetcode 155 最小栈
设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。push(x) – 将元素 x 推入栈中。pop() – 删除栈顶的元素。top() – 获取栈顶元素。getMin() – 检索栈中的最小元素。示例:MinStack minStack = new MinStack();minStack.push(-2);minStack.push(0);minStack.push(-3);minStack.getMin(); --> 返回 -3.minStack原创 2020-05-29 10:43:14 · 109 阅读 · 0 评论 -
算法 | Leetcode 119 杨辉三角II
给定一个非负索引 k,其中 k ≤ 33,返回杨辉三角的第 k 行。在杨辉三角中,每个数是它左上方和右上方的数的和。示例:输入: 3输出: [1,3,3,1]题解:class Solution {public List<Integer> getRow(int rowIndex) { List<Integer> pre = new ArrayList<>(); List<Integer> cur = new ArrayList<原创 2020-05-29 10:42:38 · 157 阅读 · 0 评论