自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 144. 二叉树的前序遍历

难度:中等给定一个二叉树,返回它的前序遍历。示例:输入: [1,null,2,3] 1 \ 2 / 3 输出: [1,2,3]进阶:递归算法很简单,你可以通过迭代算法完成吗?分析:pre-order就是根→左→右。代码:/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNo...

2020-09-21 14:47:10 17

原创 24. 两两交换链表中的节点

难度:中等给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例:给定 1->2->3->4, 你应该返回 2->1->4->3.分析:代码:结果:...

2020-09-21 14:39:51 11

原创 78. 子集

难度:中等给定一组不含重复元素的整数数组nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。示例:输入: nums = [1,2,3]输出:[ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], []]分析:用回溯法代码:class Solution { public List<List<Integer>> subsets(int[] n...

2020-09-21 14:33:01 18

原创 404. 左叶子之和

难度:简单计算给定二叉树的所有左叶子之和。示例: 3 / \ 9 20 / \ 15 7在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24分析:如果是左节点且是子节点的话,就记录val代码:/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * .

2020-09-21 14:21:50 8

原创 1038. 从二叉搜索树到更大和树/538. 把二叉搜索树转换为累加树

给出二叉搜索树的根节点,该二叉树的节点值各不相同,修改二叉树,使每个节点 node的新值等于原树中大于或等于node.val的值之和。提醒一下,二叉搜索树满足下列约束条件:节点的左子树仅包含键 小于 节点键的节点。节点的右子树仅包含键 大于 节点键的节点。左右子树也必须是二叉搜索树。示例:输入:[4,1,6,0,2,5,7,null,null,null,3,null,null,null,8]输出:[30,36,21,36,35,26,15,null,null,null,33...

2020-09-21 14:08:54 17

原创 100. 相同的树

难度:简单给定两个二叉树,编写一个函数来检验它们是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。示例1:输入: 1 1 / \ / \ 2 3 2 3 [1,2,3], [1,2,3]输出: true示例 2:输入: 1 1 / \ 2 ..

2020-09-18 14:25:34 22

原创 88. 合并两个有序数组

难度:简单给你两个有序整数数组nums1和nums2,请你将nums2合并到nums1中,使nums1成为一个有序数组。说明:初始化nums1和nums2的元素数量分别为m和n。 你可以假设nums1有足够的空间(空间大小大于或等于m + n)来保存nums2中的元素。示例:输入:nums1 = [1,2,3,0,0,0], m = 3nums2 = [2,5,6], n = 3输出:[1,2,2,3,5,6]分...

2020-09-18 14:18:29 24

原创 182. 查找重复的电子邮箱

难度:简单Create table If Not Exists Person (Id int, Email varchar(255))Truncate table Personinsert into Person (Id, Email) values ('1', 'a@b.com')insert into Person (Id, Email) values ('2', 'c@d.com')insert into Person (Id, Email) values ('3', 'a@b.com.

2020-09-18 13:50:54 33

原创 66. 加一

难度:简单给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。示例1:输入: [1,2,3]输出: [1,2,4]解释: 输入数组表示数字 123。示例2:输入: [4,3,2,1]输出: [4,3,2,2]解释: 输入数组表示数字 4321。分析:略代码:class Solution { public i...

2020-09-18 11:52:47 11

原创 38. 外观数列

难度:简单给定一个正整数n(1 ≤n≤ 30),输出外观数列的第n项。注意:整数序列中的每一项将表示为一个字符串。「外观数列」是一个整数序列,从数字 1 开始,序列中的每一项都是对前一项的描述。前五项如下:1. 12. 113. 214. 12115. 111221第一项是数字 1描述前一项,这个数是1即 “一个 1 ”,记作11描述前一项,这个数是11即 “两个 1 ” ,记作21描述前一项,这个数...

2020-09-18 11:09:28 22

原创 685. 冗余连接 II

难度:困难在本问题中,有根树指满足以下条件的有向图。该树只有一个根节点,所有其他节点都是该根节点的后继。每一个节点只有一个父节点,除了根节点没有父节点。输入一个有向图,该图由一个有着N个节点 (节点值不重复1, 2, ..., N) 的树及一条附加的边构成。附加的边的两个顶点包含在1到N中间,这条附加的边不属于树中已存在的边。结果图是一个以边组成的二维数组。 每一个边的元素是一对[u, v],用以表示有向图中连接顶点u和顶点v的边,其中u是v的一个父节点。返回一条能删除...

2020-09-18 10:26:46 75

原创 684. 冗余连接

难度:中等在本问题中, 树指的是一个连通且无环的无向图。输入一个图,该图由一个有着N个节点 (节点值不重复1, 2, ..., N) 的树及一条附加的边构成。附加的边的两个顶点包含在1到N中间,这条附加的边不属于树中已存在的边。结果图是一个以边组成的二维数组。每一个边的元素是一对[u, v],满足u < v,表示连接顶点u和v的无向图的边。返回一条可以删去的边,使得结果图是一个有着N个节点的树。如果有多个答案,则返回二维数组中最后出现的边。答案边[u, v]应满足相同的格式...

2020-09-17 17:29:32 24

原创 18. 四数之和

难度:中等给定一个包含n个整数的数组nums和一个目标值target,判断nums中是否存在四个元素a,b,c和d,使得a+b+c+d的值与target相等?找出所有满足条件且不重复的四元组。注意:答案中不可以包含重复的四元组。示例:给定数组 nums = [1, 0, -1, 0, -2, 2],和 target = 0。满足要求的四元组集合为:[ [-1, 0, 0, 1], [-2, -1, 1, 2], [-2, ...

2020-09-16 10:27:44 20

原创 15. 三数之和

难度:中等给你一个包含n个整数的数组nums,判断nums中是否存在三个元素a,b,c ,使得a + b + c =0 ?请你找出所有满足条件且不重复的三元组。注意:答案中不可以包含重复的三元组。示例:给定数组 nums = [-1, 0, 1, 2, -1, -4],满足要求的三元组集合为:[ [-1, 0, 1], [-1, -1, 2]]分析:双指针(三指针?)遍历,第一个数限制在数组的开头到倒数第三个数之间,第二个数限制在第一个数的右边,...

2020-09-16 10:19:09 14

原创 226. 翻转二叉树

难度:简单翻转一棵二叉树。示例:输入: 4 / \ 2 7 / \ / \1 3 6 9输出: 4 / \ 7 2 / \ / \9 6 3 1备注:这个问题是受到Max Howell的原问题启发的 :谷歌:我们90%的工程师使用您编写的软件(Homebrew),但是您却无法在面试时在白板上写出翻转二叉树这道题,这太糟糕了。分析:用递归,从底层开始左右交换。...

2020-09-16 09:51:33 36

原创 37. 解数独

难度:困难编写一个程序,通过已填充的空格来解决数独问题。一个数独的解法需遵循如下规则:数字1-9在每一行只能出现一次。 数字1-9在每一列只能出现一次。 数字1-9在每一个以粗实线分隔的3x3宫内只能出现一次。空白格用'.'表示。一个数独。答案被标成红色。Note:给定的数独序列只包含数字1-9和字符'.'。 你可以假设给定的数独只有唯一解。 给定数独永远是9x9形式的。分析:用回溯算法,先遍历找到要填的没数据的坐标...

2020-09-15 15:35:35 15

原创 263. 丑数

难度:简单编写一个程序判断给定的数是否为丑数。丑数就是只包含质因数2, 3, 5的正整数。示例 1:输入: 6输出: true解释: 6 = 2 ×3示例 2:输入: 8输出: true解释: 8 = 2 × 2 ×2示例3:输入: 14输出: false 解释: 14 不是丑数,因为它包含了另外一个质因数7。说明:1是丑数。 输入不会超过 32 位有符号整数的范围:[−231, 231− 1]。分析:略。代码...

2020-09-15 11:58:52 14

原创 202. 快乐数

难度:简单编写一个算法来判断一个数n是不是快乐数。「快乐数」定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是无限循环但始终变不到 1。如果可以变为 1,那么这个数就是快乐数。如果n是快乐数就返回True;不是,则返回False。示例:输入:19输出:true解释:分析:有三种可能①循环后变成1 如19②循环后始终不是1③循环后越来越大,趋于无穷;但是比如三位数最大值...

2020-09-15 11:49:13 18

原创 36. 有效的数独

难度:中等判断一个9x9 的数独是否有效。只需要根据以下规则,验证已经填入的数字是否有效即可。数字1-9在每一行只能出现一次。 数字1-9在每一列只能出现一次。 数字1-9在每一个以粗实线分隔的3x3宫内只能出现一次。上图是一个部分填充的有效的数独。数独部分空格内已填入了数字,空白格用'.'表示。示例1:输入:[ ["5","3",".",".","7",".",".",".","."], ["6",".",".","1","9","5",...

2020-09-15 11:04:11 11

原创 622. 设计循环队列

难度:中等设计你的循环队列实现。 循环队列是一种线性数据结构,其操作表现基于 FIFO(先进先出)原则并且队尾被连接在队首之后以形成一个循环。它也被称为“环形缓冲器”。循环队列的一个好处是我们可以利用这个队列之前用过的空间。在一个普通队列里,一旦一个队列满了,我们就不能插入下一个元素,即使在队列前面仍有空间。但是使用循环队列,我们能使用这些空间去存储新的值。你的实现应该支持如下操作:MyCircularQueue(k): 构造器,设置队列长度为 k 。 Front: 从队首获取元素。如果.

2020-09-14 18:05:49 8

原创 220. 存在重复元素 III

难度:中等在整数数组nums中,是否存在两个下标i和j,使得nums [i]和nums [j]的差的绝对值小于等于t,且满足i和j的差的绝对值也小于等于ķ。如果存在则返回true,不存在返回false。示例1:输入: nums = [1,2,3,1], k = 3, t = 0输出: true示例 2:输入: nums = [1,0,1,1], k = 1, t = 2输出: true示例 3:输入: nums = [1,5...

2020-09-14 17:45:10 12

原创 219. 存在重复元素 II

难度:简单给定一个整数数组和一个整数k,判断数组中是否存在两个不同的索引i和j,使得nums [i] = nums [j],并且i和j的差的绝对值至多为k。示例1:输入: nums = [1,2,3,1], k = 3输出: true示例 2:输入: nums = [1,0,1,1], k = 1输出: true示例 3:输入: nums = [1,2,3,1,2,3], k = 2输出: false分析:用map记录出现的元素和...

2020-09-14 16:28:04 8

原创 217. 存在重复元素

难度:简单给定一个整数数组,判断是否存在重复元素。如果任意一值在数组中出现至少两次,函数返回true。如果数组中每个元素都不相同,则返回false。示例 1:输入: [1,2,3,1]输出: true示例 2:输入: [1,2,3,4]输出: false示例3:输入: [1,1,1,3,3,4,3,2,4,2]输出: true分析:略代码:class Solution { public boolean containsDup...

2020-09-14 16:16:02 5

原创 237. 删除链表中的节点

难度:简单请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点。传入函数的唯一参数为要被删除的节点。现有一个链表 --head =[4,5,1,9],它可以表示为:示例 1:输入:head = [4,5,1,9], node = 5输出:[4,1,9]解释:给定你链表中值为5的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9.示例 2:输入:head = [4,5,1,9], node = 1输出:...

2020-09-14 16:08:25 23

原创 292. Nim 游戏

难度:简单你和你的朋友,两个人一起玩Nim 游戏:桌子上有一堆石头,每次你们轮流拿掉1 - 3 块石头。 拿掉最后一块石头的人就是获胜者。你作为先手。你们是聪明人,每一步都是最优解。 编写一个函数,来判断你是否可以在给定石头数量的情况下赢得游戏。示例:输入: 4输出: false 解释: 如果堆中有 4 块石头,那么你永远不会赢得比赛; 因为无论你拿走 1 块、2 块 还是 3 块石头,最后一块石头总是会被你的朋友拿走。分析:拿完后是4的倍数就能赢,所以作...

2020-09-14 16:00:47 17

原创 47. 全排列 II

难度:中等给定一个可包含重复数字的序列,返回所有不重复的全排列。示例:输入: [1,1,2]输出:[ [1,1,2], [1,2,1], [2,1,1]]分析:在上一题的基础上,加个set去重,如果出现重复元素,就直接跳过代码:class Solution { public List<List<Integer>> permuteUnique(int[] nums) { List<List<Int.

2020-09-14 14:43:23 13

原创 46. 全排列

难度:中等给定一个没有重复数字的序列,返回其所有可能的全排列。示例:输入: [1,2,3]输出:[ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1]]分析:回溯法,因为是全排列,不需要剪枝定义递归函数 backtrack(first, output) 表示从左往右填到第 \textit{first}first 个位置,当前排列为 \textit{output}output。 那么整个递归函...

2020-09-14 14:21:28 21

原创 11. 盛最多水的容器

难度:中等给你n个非负整数a1,a2,...,an,每个数代表坐标中的一个点(i,ai) 。在坐标内画n条垂直线,垂直线i的两个端点分别为(i,ai) 和 (i, 0)。找出其中的两条线,使得它们与x轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器,且n的值至少为 2。图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为49。示例:输入:[1,8,6,2,5,4,8,3,...

2020-09-14 11:28:31 16

原创 94. 二叉树的中序遍历

难度:中等给定一个二叉树,返回它的中序遍历。示例:输入: [1,null,2,3] 1 \ 2 / 3输出: [1,3,2]进阶:递归算法很简单,你可以通过迭代算法完成吗?方法一:递归分析:略代码:/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * ...

2020-09-14 10:14:14 17

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

难度:中等给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中没有重复出现的数字。示例1:输入: 1->2->3->3->4->4->5输出: 1->2->5示例2:输入: 1->1->1->2->3输出: 2->3分析:快慢指针,快指针遍历,跳过所有重复的node,慢指针始终指向正在遍历的子链表的前一个node;代码:/** * Definition for...

2020-09-13 01:13:18 12

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

难度:简单给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。示例1:输入: 1->1->2输出: 1->2示例2:输入: 1->1->2->3->3输出: 1->2->3分析:略代码:/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode ne...

2020-09-12 23:47:17 8

原创 58. 最后一个单词的长度

难度:简单给定一个仅包含大小写字母和空格' '的字符串s,返回其最后一个单词的长度。如果字符串从左向右滚动显示,那么最后一个单词就是最后出现的单词。如果不存在最后一个单词,请返回 0。说明:一个单词是指仅由字母组成、不包含任何空格字符的最大子字符串。示例:输入: "Hello World"输出: 5分析:略代码:class Solution { public int lengthOfLastWord(String s) { S...

2020-09-12 18:16:56 24

原创 75. 颜色分类

难度:中等给定一个包含红色、白色和蓝色,一共n个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。此题中,我们使用整数 0、1 和 2 分别表示红色、白色和蓝色。注意:不能使用代码库中的排序函数来解决这道题。示例:输入: [2,0,2,1,1,0]输出: [0,0,1,1,2,2]进阶:一个直观的解决方案是使用计数排序的两趟扫描算法。 首先,迭代计算出0、1 和 2 元素的个数,然后按照0、1、2的排序,重写当前数组。 你能...

2020-09-12 17:53:51 41

原创 637. 二叉树的层平均值

难度:简单给定一个非空二叉树, 返回一个由每层节点平均值组成的数组。示例 1:输入: 3 / \ 9 20 / \ 15 7输出:[3, 14.5, 11]解释:第 0 层的平均值是 3 , 第1层是 14.5 , 第2层是 11 。因此返回 [3, 14.5, 11] 。提示:节点值的范围在32位有符号整数范围内。分析:遍历每一层,计算总和,用Queue来做,每次还要记录每层的node个数。代码:/** * D.

2020-09-12 17:08:57 23

原创 80. 删除排序数组中的重复项 II

难度:中等给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素最多出现两次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。示例1:给定 nums = [1,1,1,2,2,3],函数应返回新长度 length = 5, 并且原数组的前五个元素被修改为 1, 1, 2, 2, 3 。你不需要考虑数组中超出新长度后面的元素。示例2:给定 nums = [0,0,1,1,1,1,2,3,3],...

2020-09-11 11:29:21 17

原创 216. 组合总和 III

难度:中等找出所有相加之和为n的k个数的组合。组合中只允许含有 1 -9 的正整数,并且每种组合中不存在重复的数字。说明:所有数字都是正整数。 解集不能包含重复的组合。示例 1:输入: k = 3, n = 7输出: [[1,2,4]]示例 2:输入: k = 3, n = 9输出: [[1,2,6], [1,3,5], [2,3,4]]分析:回溯+剪枝代码:class Solution { public List<Lis...

2020-09-11 09:48:25 34

原创 138. 复制带随机指针的链表/剑指 Offer 35. 复杂链表的复制

难度:中等给定一个链表,每个节点包含一个额外增加的随机指针,该指针可以指向链表中的任何节点或空节点。要求返回这个链表的深拷贝。我们用一个由n个节点组成的链表来表示输入/输出中的链表。每个节点用一个[val, random_index]表示:val:一个表示Node.val的整数。 random_index:随机指针指向的节点索引(范围从0到n-1);如果不指向任何节点,则为null。示例 1:输入:head = [[7,null],[13,0],[...

2020-09-10 11:32:20 17

原创 796. 旋转字符串

难度:简单给定两个字符串,A和B。A的旋转操作就是将A最左边的字符移动到最右边。例如, 若A = 'abcde',在移动一次之后结果就是'bcdea'。如果在若干次旋转操作之后,A能变成B,那么返回True。示例 1:输入: A = 'abcde', B = 'cdeab'输出: true示例 2:输入: A = 'abcde', B = 'abced'输出: false注意:A和B长度不超过100。分析:两个A字符串拼接在一起,如...

2020-09-10 10:43:57 28

原创 剑指 Offer 58 - II. 左旋转字符串

难度:简单字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。示例 1:输入: s = "abcdefg", k = 2输出:"cdefgab"示例 2:输入: s = "lrloseumgh", k = 6输出:"umghlrlose"限制:1 <= k < s.length <= 10000...

2020-09-10 10:37:34 19

原创 40. 组合总和 II

难度:中等给定一个数组candidates和一个目标数target,找出candidates中所有可以使数字和为target的组合。candidates中的每个数字在每个组合中只能使用一次。说明:所有数字(包括目标数)都是正整数。 解集不能包含重复的组合。示例1:输入: candidates =[10,1,2,7,6,1,5], target =8,所求解集为:[ [1, 7], [1, 2, 5], [2, 6], [1, 1, 6...

2020-09-10 10:31:04 25

空空如也

空空如也

空空如也

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

TA关注的人 TA的粉丝

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