![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
LeetCode
LeetCode刷题
kokouya
♥
展开
-
LeetCode199.二叉树的右视图
题目描述:给定一棵二叉树,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。示例:输入:[1,2,3,null,5,null,4]输出:[1, 3, 4]解释: 1 <---/ \2 3 <---\ \ 5 4 <---/** * D...原创 2020-02-10 22:31:22 · 102 阅读 · 0 评论 -
LeetCode581.最短无序连续子数组
题目描述:给定一个整数数组,你需要寻找一个连续的子数组,如果对这个子数组进行升序排序,那么整个数组都会变为升序排序。你找到的子数组应是最短的,请输出它的长度。示例 :输入: [2, 6, 4, 8, 10, 9, 15]输出: 5解释: 你只需要对 [6, 4, 8, 10, 9] 进行升序排序,那么整个表都会变为升序排序。说明 :输入的数组长度范围在[1, 10,000...原创 2020-02-04 20:29:58 · 201 阅读 · 0 评论 -
150.逆波兰表达式求值
题目描述:根据逆波兰表示法,求表达式的值。有效的运算符包括+,-,*,/。每个运算对象可以是整数,也可以是另一个逆波兰表达式。说明:整数除法只保留整数部分。给定逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。示例1:输入: ["2", "1", "+", "3", "*"]输出: 9解释: ((2 + 1) * 3) = 9示...原创 2020-02-04 19:49:24 · 141 阅读 · 0 评论 -
34.在排序数组中查找元素的第一个和最后一个位置
题目描述:给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。你的算法时间复杂度必须是O(log n) 级别。如果数组中不存在目标值,返回[-1, -1]。示例 1:输入: nums = [5,7,7,8,8,10], target = 8输出: [3,4]示例2:输入: nums = [5,7,7,8,8...转载 2020-02-04 18:25:12 · 150 阅读 · 0 评论 -
443.压缩字符串
题目描述:给定一组字符,使用原地算法将其压缩。压缩后的长度必须始终小于或等于原数组长度。数组的每个元素应该是长度为 1的字符(不是 int 整数类型)。在完成原地修改输入数组后,返回数组的新长度。示例 1:输入:["a","a","b","b","c","c","c"]输出:返回6,输入数组的前6个字符应该是:["a","2","b","2","c","3"]示例 2:...原创 2020-02-03 12:17:46 · 148 阅读 · 0 评论 -
LeetCode 925.长键按入
题目描述:你的朋友正在使用键盘输入他的名字name。偶尔,在键入字符c时,按键可能会被长按,而字符可能被输入 1 次或多次。你将会检查键盘输入的字符typed。如果它对应的可能是你的朋友的名字(其中一些字符可能被长按),那么就返回True。示例 1:输入:name = "alex", typed = "aaleex"输出:true解释:'alex' 中的 'a' 和 'e'...原创 2020-02-02 21:01:47 · 116 阅读 · 0 评论 -
67.二进制求和
题目描述:给定两个二进制字符串,返回他们的和(用二进制表示)。输入为非空字符串且只包含数字1和0。示例1:输入: a = "11", b = "1"输出: "100"示例2:输入: a = "1010", b = "1011"输出: "10101"解析:和平时的十进制加法一样,从两个字符串的末尾开始相加,如果有进位就标记起来,则该位的值应再加上进位位...原创 2020-02-02 16:05:50 · 206 阅读 · 0 评论 -
8.字符串转换整数
题目描述:请你来实现一个atoi函数,使其能将字符串转换成整数。丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。 当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字组合起来,作为该整数的正负号;假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成整数。 该字符串除了有效的整数部分之后也可能会存在多余的字符,这些字符可以被忽略,...原创 2020-02-02 15:07:33 · 106 阅读 · 0 评论 -
88.合并两个有序数组
题目描述:给定两个有序整数数组nums1 和 nums2,将 nums2 合并到nums1中,使得num1 成为一个有序数组。说明:初始化nums1 和 nums2 的元素数量分别为m 和 n。你可以假设nums1有足够的空间(空间大小大于或等于m + n)来保存 nums2 中的元素。输入:nums1 = [1,2,3,0,0,0], m = 3nums2 = [...原创 2020-01-31 21:26:53 · 74 阅读 · 0 评论 -
27.移除元素
题目描述:给定一个数组 nums和一个值 val,你需要原地移除所有数值等于val的元素,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。示例 1:给定 nums = [3,2,2,3], val = 3,函数应该返回新的长度 2, 并且 nums 中的前两...原创 2020-01-31 12:05:15 · 103 阅读 · 0 评论 -
414.第三大的数
题目描述:给定一个非空数组,返回此数组中第三大的数。如果不存在,则返回数组中最大的数。要求算法时间复杂度必须是O(n)。示例 1:输入: [3, 2, 1] 输出: 1示例 2:输入: [1, 2] 输出: 2 解释: 第三大的数不存在, 所以返回最大的数 2 .示例 3:输入: [2, 2, 3, 1] 输出: 1 ...原创 2020-01-24 14:33:04 · 279 阅读 · 0 评论 -
724.寻找数组的中心索引
题目描述:给定一个整数类型的数组nums,请编写一个能够返回数组“中心索引”的方法。我们是这样定义数组中心索引的:数组中心索引的左侧所有元素相加的和等于右侧所有元素相加的和。如果数组不存在中心索引,那么我们应该返回 -1。如果数组有多个中心索引,那么我们应该返回最靠近左边的那一个。示例 1:输入:nums = [1, 7, 3, 6, 5, 6]输出: 3解释:索...原创 2020-01-23 19:33:31 · 109 阅读 · 0 评论 -
771.宝石与石头
题目描述:给定字符串J代表石头中宝石的类型,和字符串S代表你拥有的石头。S中每个字符代表了一种你拥有的石头的类型,你想知道你拥有的石头中有多少是宝石。J中的字母不重复,J和S中的所有字符都是字母。字母区分大小写,因此"a"和"A"是不同类型的石头。示例 1:输入: J = "aA", S = "aAAbbbb"输出: 3示例 2:输入: J = "z", S = "...原创 2019-10-11 19:17:45 · 87 阅读 · 0 评论 -
102.二叉树的层序遍历及其变形
题目描述:给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。例如:给定二叉树:[3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回其层次遍历结果:[ [3], [9,20], [15,7]]思路:根入队列,直到队列为空之前,取队首结点,然后将该节点的孩子入队...原创 2019-09-26 14:48:16 · 166 阅读 · 0 评论 -
606.根据二叉树创建字符串
题目描述:你需要采用前序遍历的方式,将一个二叉树转换成一个由括号和整数组成的字符串。空节点则用一对空括号 "()" 表示。而且你需要省略所有不影响字符串与原始二叉树之间的一对一映射关系的空括号对。示例 1:输入: 二叉树: [1,2,3,4] 1 / \ 2 3 / 4 输出: "1(2(4))(3)"解释: 原本将...原创 2019-09-23 19:12:26 · 231 阅读 · 0 评论 -
105.106.构造二叉树
1.题目描述:根据一棵树的前序遍历与中序遍历构造二叉树。注意:你可以假设树中没有重复的元素。例如,给出前序遍历 preorder =[3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]思路:前序遍历便于查找根结点,中序遍历便于切分树的左右子树。/** * Definition for a binary tree node. * publ...原创 2019-09-22 20:20:06 · 156 阅读 · 0 评论 -
236.二叉树的最近公共祖先
题目描述:给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。思路:给定的 p ,q 结点分别有以下几种情况:p 或者 q 就是 root ,那么返回 root。如结点 3 和结点 8 的最近公共祖先就是...原创 2019-09-22 19:21:52 · 75 阅读 · 0 评论 -
110:平衡二叉树
题目描述:给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点的左右两个子树的高度差的绝对值不超过1。思路: 问题划分为判断每个结点的左右子树高度差绝对值不超过 1。即左右子树均为平衡二叉树。那么分别求出左右子树的高度,然后做差值比较。class Solution { public int getHeight(...原创 2019-09-22 17:48:38 · 101 阅读 · 0 评论 -
101:对称二叉树
题目描述:给定一个二叉树,检查它是否是镜像对称的。首先讨论另一个问题,如何判断两棵树是镜像的?如图所示的两棵树就是镜像的。那么这个问题的突破口很简单,基本思路就是判断两棵树是否相同,只是判断的条件发生了改变,判断第一棵树的左子树是否与第二棵树的右子树相同。public boolean isMirrorTree(TreeNode p,TreeNode q){ if(p =...原创 2019-09-22 16:58:13 · 90 阅读 · 0 评论 -
104:二叉树的最大深度
题目描述:给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明:叶子节点是指没有子节点的节点。/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode righ...原创 2019-09-22 17:49:17 · 72 阅读 · 0 评论 -
572:另一个树的子树
题目描述:给定两个非空二叉树 s 和 t,检验s 中是否包含和 t 具有相同结构和节点值的子树。s 的一个子树包括 s 的一个节点和这个节点的所有子孙。s 也可以看做它自身的一棵子树。思路: 从根结点开始,在 s 中查找 t ,isSameTree()用来判断两棵树是否相同,search()用来递归遍历结点。class Solution { public boo...原创 2019-09-22 17:16:16 · 108 阅读 · 0 评论 -
100:相同的树
题目描述:给定两个二叉树,编写一个函数来检验它们是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。思路:将树看做三部分,根左子树和右子树。由递归思路写出,判断两棵树的这三个部分是否相同。递归的出口在于两棵树同时为空时,那么这两棵树相同,否则,不同时为空时,两棵树一定不相同。class Solution { public boolean isSameT...原创 2019-09-22 16:47:51 · 80 阅读 · 0 评论 -
144,94,145.二叉树前中后序遍历的实现
遍历的思路一致,只是需要调整下“打印”的顺序。/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } *...原创 2019-09-16 22:00:56 · 77 阅读 · 0 评论 -
1053:交换一次的先前排列
LeetCood题目:给你一个正整数的数组 A(其中的元素不一定完全不同),请你返回可在一次交换(交换两数字 A[i] 和 A[j] 的位置)后得到的、按字典序排列小于 A 的最大可能排列。如果无法这么操作,就请返回原数组。示例 1:输入:[3,2,1] 输出:[3,1,2] 解释:交换 2 和 1示例 2:输入:[1,1,5] 输出:[1,1,5] 解释: 这已经是最小排...原创 2019-09-15 19:43:33 · 196 阅读 · 0 评论 -
622:设计循环队列
LeetCode题目:设计你的循环队列实现。 循环队列是一种线性数据结构,其操作表现基于 FIFO(先进先出)原则并且队尾被连接在队首之后以形成一个循环。它也被称为“环形缓冲器”。循环队列的一个好处是我们可以利用这个队列之前用过的空间。在一个普通队列里,一旦一个队列满了,我们就不能插入下一个元素,即使在队列前面仍有空间。但是使用循环队列,我们能使用这些空间去存储新的值。你的实现应该支持如下...原创 2019-09-13 23:20:00 · 266 阅读 · 0 评论 -
155:最小栈
LeetCode题目:设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。push(x)-- 将元素 x 推入栈中。pop()-- 删除栈顶的元素。top()-- 获取栈顶元素。getMin() -- 检索栈中的最小元素。思路:双栈实现。/*E push(E item) 压栈E pop() 出栈E peek() 查看栈顶元...原创 2019-09-13 22:42:24 · 77 阅读 · 0 评论 -
225:用队列实现栈
LeetCode题目:使用队列实现栈的下列操作:push(x) -- 元素 x 入栈pop() -- 移除栈顶元素top() -- 获取栈顶元素empty() -- 返回栈是否为空思路:/*入队列 add(e) offer(e)出队列 remove() poll()队首元素 element() peek()*/public class MySt...原创 2019-09-13 22:23:49 · 71 阅读 · 0 评论 -
232:用栈实现队列
LeetCode 用栈实现队列:使用栈实现队列的下列操作:push(x) -- 将一个元素放入队列的尾部。pop() -- 从队列首部移除元素。peek() -- 返回队列首部的元素。empty() -- 返回队列是否为空。思路:双栈实现。从 in 栈入数据,从 out 栈出数据,当需要获取队首元素或者移除队首元素时,先判断 out 栈是否为空,如果不为空,直接操作。如果为空,...原创 2019-09-14 11:33:49 · 72 阅读 · 0 评论 -
20:有效的括号
LeetCode题目:给定一个只包括 '(',')','{','}','[',']'的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。示例 1:输入: "()" 输出: true 示例2:输入: "()[]{}" 输出: true 示例3:输入: "(]" 输出...原创 2019-09-13 21:43:47 · 80 阅读 · 0 评论 -
15:三数之和
LeetCode题目:给定一个包含 n 个整数的数组nums,判断nums中是否存在三个元素 a,b,c , 使得a + b + c = 0 ?找出所有满足条件且不重复的三元组。例如, 给定数组 nums = [-1, 0, 1, 2, -1, -4],满足要求的三元组集合为:[ [-1, 0, 1], [-1, -1, 2]]思路描述:首先将数组进行排序(升序),然...原创 2019-09-13 20:58:13 · 158 阅读 · 0 评论 -
387:字符串中的第一个唯一字符
LeetCode原题链接题目描述:给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。案例:s = "leetcode" , 返回 0。 s = "loveleetcode",返回 2。思路:定义数组,长度为 26,代表 26 个字母,遍历字符串,将该字符出现次数记录下来,再次遍历字符串,判断该字符出现次数是否为 1,若是 1,则该字符就是第一个...原创 2019-08-15 23:38:34 · 224 阅读 · 0 评论 -
53:最大子序和
LeetCode题目链接问题描述:给定一个整数数组 nums,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4], 输出: 6 解释:连续子数组[4,-1,2,1] 的和最大,为6。思路:动态规划,定义两个变量,sum 代表当前子数组的和, ans 代表最大子数组的和如果 sum...原创 2019-08-15 20:24:27 · 140 阅读 · 0 评论 -
9:回文数
问题描述:力扣链接 判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。LeetCode解析示例 1:输入: 121 输出: true示例2:输入: -121 输出: false //解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。Java实现回文数测试代码方法1:首先负数肯定...原创 2019-08-12 22:33:03 · 126 阅读 · 0 评论 -
260:只出现一次的数字2
LeetCode题目描述:给定一个整数数组nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次。 找出只出现一次的那两个元素。题目链接示例 :输入: [1,2,1,3,2,5]输出: [3,5]方法1:代码链接对数组进行排序,排序后比较相邻数字是否相同。图示:图示import java.util.Arrays;class Solution { pu...原创 2019-08-12 18:44:03 · 1432 阅读 · 0 评论 -
链表面试题汇总
一. 类的设计原则自顶向下设计 职责明确 一个方法完成一项明确的任务 确定方法的权限,哪些对内,哪些对外 重复的代码抽离到一个方法中,而不是复制粘贴二. Main类:负责测试(1.测试用例编写。2.测试数据构造。3.测试数据打印)Solution类:解决问题(方法的实现)Node 和 ListNode 类:链表的结点三. 该项目所实现的功能:链表的逆置 删除与给定...原创 2019-07-29 18:17:01 · 112 阅读 · 0 评论 -
61:旋转链表
:旋转链表题目描述:给定一个链表,旋转链表,将链表每个节点向右移动k个位置,其中k是非负数。示例1:输入: 1->2->3->4->5->NULL, k = 2 输出: 4->5->1->2->3->NULL思路:求出链表长度,对 k 值做处理,如果 k 值为 0 或者长度的整数倍,则不用旋转 len - k ...原创 2019-07-29 18:11:36 · 74 阅读 · 0 评论 -
19:删除链表的倒数第 n 个结点
:原题链接:删除链表的倒数第 N 个结点题目描述:给定一个链表,删除链表的倒数第n个节点,并且返回链表的头结点。示例:给定一个链表: 1->2->3->4->5, 和 n = 2. 当删除了倒数第二个节点后,链表变为 1->2->3->5 说明:给定的n保证是有效的。 思路:求出链表长度,若 length 与 n 相等,则需要返...原创 2019-07-27 18:08:50 · 169 阅读 · 0 评论 -
141.142:环形链表
(LeetCode141)环形链表1题目描述:给定一个链表,判断链表中是否有环。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。示例 1:输入:head = [3,2,0,-4], pos = 1 输出:true思路:快慢指针法。快的一次 2 步,慢的一次 1 步,只要是环形链表两个结点一定...原创 2019-07-27 16:31:34 · 88 阅读 · 0 评论 -
160:相交链表
(LeetCode160)相交链表题目描述:编写一个程序,找到两个单链表相交的起始节点。如图:思路:分别求出两个链表的长度,用长的减去短的就是长链表应该先走的步数 两个链表的节点同时移动,知道相遇则说明链表相交,若有链表走到空也没有相遇则说明没有相交,返回 null。如上图,链表 A 的长度为 5 ,链表 B 的长度为 6,相减得到 diff = 1,则让较长的链表 B 走...原创 2019-07-27 15:43:30 · 137 阅读 · 0 评论 -
138:复制带随机指针的链表
:题目描述:给定一个链表,每个节点包含一个额外增加的随机指针,该指针可以指向链表中的任何节点或空节点。要求返回这个链表的深拷贝。原题链接:复制带随机指针的链表思路:/*// Definition for a Node.class Node { public int val; public Node next; public Node random;...原创 2019-07-27 15:23:00 · 83 阅读 · 0 评论