![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
leetcode系列
ThunderWay
北京工业大学计算机研究生就读
展开
-
树的子结构
题目描述输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)//思路见:大佬链接;/**public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; }}*/import java.util.Stack;...转载 2020-08-05 18:04:21 · 76 阅读 · 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 步: 4->5->1->2->3->NULL示例2:输入: 0->1->2->...原创 2020-07-20 20:12:09 · 63 阅读 · 0 评论 -
两两交换链表中的节点
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例:给定 1->2->3->4, 你应该返回 2->1->4->3./***Definitionforsingly-linkedlist.*publicclassListNode{*intval;*ListNodenext;*ListNode(int...原创 2020-07-17 18:14:28 · 61 阅读 · 0 评论 -
两数相加
给出两个非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储一位数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> 8原因:342 + 465 = 807/***Definitionforsingly-...转载 2020-07-15 20:23:57 · 66 阅读 · 0 评论 -
剑指 Offer 06. 从尾到头打印链表
输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。示例 1:输入:head = [1,3,2]输出:[2,3,1]/***Definitionforsingly-linkedlist.*publicclassListNode{*intval;*ListNodenext;*ListNode(intx){val=x;}*}*/classSolution{...原创 2020-07-01 20:08:04 · 70 阅读 · 0 评论 -
比较退格的字符串
844. 比较含退格的字符串难度简单131给定S和T两个字符串,当它们分别被输入到空白的文本编辑器后,判断二者是否相等,并返回结果。#代表退格字符。注意:如果对空文本输入退格字符,文本继续为空。示例 1:输入:S = "ab#c", T = "ad#c"输出:true解释:S 和 T 都会变成 “ac”。示例 2:输入:S = "ab##", T = "c#d#"输出:true解释:S 和 T 都会变成 “”。示例 3:输入:S = "...原创 2020-06-30 21:23:11 · 190 阅读 · 0 评论 -
反转字符串中的元音字母
编写一个函数,以字符串作为输入,反转该字符串中的元音字母。示例 1:输入: "hello"输出: "holle"示例 2:输入: "leetcode"输出: "leotcede"//思路:双指针,写一个字符类型的交换函数,写一个判断是否元音字母的函数,双指针判断和交换。classSolution{publicStringreverseVowels(Strings){intp1=0;char[]array=s...原创 2020-06-30 20:40:21 · 197 阅读 · 0 评论 -
两个数组的交集 II
给定两个数组,编写一个函数来计算它们的交集。示例 1:输入: nums1 = [1,2,2,1], nums2 = [2,2]输出: [2,2]示例 2:输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4]输出: [4,9]说明:输出结果中每个元素出现的次数,应与元素在两个数组中出现的次数一致。我们可以不考虑输出结果的顺序。//思路:先对两个数组排序,然后双指针。classSolution{publicint[]interse...原创 2020-06-30 11:17:54 · 140 阅读 · 0 评论 -
移除元素
给你一个数组 nums和一个值 val,你需要 原地 移除所有数值等于val的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。示例 1:给定 nums = [3,2,2,3], val = 3,函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。你不需要考虑数组中超出新长度后面的元素。示例2:给定 nums = [0,1,2,...原创 2020-06-30 10:30:46 · 74 阅读 · 0 评论 -
移动零
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。示例:输入: [0,1,0,3,12]输出: [1,3,12,0,0]说明:必须在原数组上操作,不能拷贝额外的数组。尽量减少操作次数。classSolution{publicvoidmoveZeroes(int[]nums){intindex=0;for(inti=0;i<nums.length;i++)...原创 2020-06-29 11:54:45 · 65 阅读 · 0 评论 -
反转字符串
编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。你可以假设数组中的所有字符都是 ASCII 码表中的可打印字符。示例 1:输入:["h","e","l","l","o"]输出:["o","l","l","e","h"]示例 2:输入:["H","a","n","n","a","h"]输出:["h","a","n","n","a","H".原创 2020-06-27 18:32:18 · 69 阅读 · 0 评论 -
有序数组的平方
给定一个按非递减顺序排序的整数数组 A,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。示例 1:输入:[-4,-1,0,3,10]输出:[0,1,9,16,100]示例 2:输入:[-7,-3,2,3,11]输出:[4,9,9,49,121]//思路:双指针,p1从负数从右往左,p2从非负数从左往右,建立一个辅助数组,小的往里面放。classSolution{publicint[]sortedSquares(int[]A){in...原创 2020-06-27 18:30:58 · 145 阅读 · 0 评论 -
208. 实现 Trie (前缀树)
实现一个 Trie (前缀树),包含insert,search, 和startsWith这三个操作。示例:Trie trie = new Trie();trie.insert("apple");trie.search("apple"); // 返回 truetrie.search("app"); // 返回 falsetrie.startsWith("app"...原创 2020-05-02 22:18:27 · 96 阅读 · 0 评论 -
合并排序的数组
面试题 10.01. 合并排序的数组难度简单48给定两个排序后的数组 A 和 B,其中 A 的末端有足够的缓冲空间容纳 B。 编写一个方法,将 B 合并入 A 并排序。初始化A 和 B 的元素数量分别为m和n。示例:输入:A = [1,2,3,0,0,0], m = 3B = [2,5,6], n = 3输出:[1,2,2,3,5,6]说明:...原创 2020-04-24 00:41:40 · 96 阅读 · 0 评论 -
完全二叉树的节点个数
222. 完全二叉树的节点个数难度中等149给出一个完全二叉树,求出该树的节点个数。说明:完全二叉树的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~2h个节点。示例:输入: 1 / \ 2 3 / \ /4 5 6...原创 2020-04-22 01:05:09 · 1068 阅读 · 0 评论 -
二叉树的完全性检验
958. 二叉树的完全性检验难度中等38给定一个二叉树,确定它是否是一个完全二叉树。百度百科中对完全二叉树的定义如下:若设二叉树的深度为 h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层所有的结点都连续集中在最左边,这就是完全二叉树。(注:第 h 层可能包含 1~2h个节点。)示例 1:输入:[1,2,3,4,5,6]输出:...原创 2020-04-18 16:23:04 · 224 阅读 · 0 评论 -
平衡二叉树
110. 平衡二叉树难度简单291给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点的左右两个子树的高度差的绝对值不超过1。示例 1:给定二叉树[3,9,20,null,null,15,7] 3 / \ 9 20 / \ 15 7返回true。/**//注意:...原创 2020-04-18 11:13:03 · 94 阅读 · 0 评论 -
二叉树的序列化与反序列化
297. 二叉树的序列化与反序列化难度困难172序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据。请设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 / 反序列化算法执行逻辑,你只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化为原...原创 2020-04-17 01:29:50 · 161 阅读 · 0 评论 -
二叉树的中序遍历
94. 二叉树的中序遍历难度中等466给定一个二叉树,返回它的中序遍历。示例:输入: [1,null,2,3] 1 \ 2 / 3输出: [1,3,2]/***Definitionforabinarytreenode.*publicclassTreeNode{*intval;...原创 2020-04-16 13:59:24 · 64 阅读 · 0 评论 -
二叉树的前序遍历
144. 二叉树的前序遍历难度中等237给定一个二叉树,返回它的前序遍历。示例:输入: [1,null,2,3] 1 \ 2 / 3 输出: [1,2,3]/***Definitionforabinarytreenode.*publicclassTreeNode{*intv...原创 2020-04-16 02:22:40 · 103 阅读 · 0 评论 -
删除链表的节点
面试题18. 删除链表的节点难度简单12给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。返回删除后的链表的头节点。注意:此题对比原题有改动示例 1:输入: head = [4,5,1,9], val = 5输出: [4,1,9]解释: 给定你链表中值为5的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9....原创 2020-03-31 19:49:38 · 182 阅读 · 0 评论 -
复制带随机指针的链表
给定一个链表,每个节点包含一个额外增加的随机指针,该指针可以指向链表中的任何节点或空节点。要求返回这个链表的深拷贝。我们用一个由n个节点组成的链表来表示输入/输出中的链表。每个节点用一个[val, random_index]表示:val:一个表示Node.val的整数。random_index:随机指针指向的节点索引(范围从0到n-1);如果不指向任何节点,则为...原创 2020-03-29 15:23:33 · 76 阅读 · 0 评论 -
删除链表的倒数第N个节点
给定一个链表,删除链表的倒数第n个节点,并且返回链表的头结点。示例:给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.说明:给定的 n保证是有效的。进阶:你能尝试使用一趟扫描实现吗?//思路:采用一个哑节点作为首节点,让哑节点.next = head,...原创 2020-03-29 01:01:57 · 77 阅读 · 0 评论 -
分隔链表
给定一个链表和一个特定值 x,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x 的节点之前。你应当保留两个分区中每个节点的初始相对位置。示例:输入: head = 1->4->3->2->5->2, x = 3输出: 1->2->2->4->3->5//思路:分割链表,定义两个指针,从链表开始遍历,将第一个比x...原创 2020-03-28 23:35:46 · 178 阅读 · 0 评论 -
回文链表
请判断一个链表是否为回文链表。示例 1:输入: 1->2输出: false示例 2:输入: 1->2->2->1输出: true进阶:你能否用O(n) 时间复杂度和 O(1) 空间复杂度解决此题?//思路:三种方式//方式一:创建一个栈,空间复杂度O(n),增加一个指针,将链表遍历,每一个节点放入栈,然后再弹出,从新开始遍历,如果全都一样,就...原创 2020-03-26 19:34:36 · 69 阅读 · 0 评论 -
链表的中间结点
给定一个带有头结点head的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。示例 1:输入:[1,2,3,4,5]输出:此列表中的结点 3 (序列化形式:[3,4,5])返回的结点值为 3 。 (测评系统对该结点序列化表述是 [3,4,5])。注意,我们返回了一个 ListNode 类型的对象 ans,这样:ans.val = 3, ans....原创 2020-03-22 15:01:49 · 103 阅读 · 0 评论 -
删除链表中的节点
请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除的节点。现有一个链表 --head =[4,5,1,9],它可以表示为:示例 1:输入: head = [4,5,1,9], node = 5输出: [4,1,9]解释: 给定你链表中值为5的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9....原创 2020-03-20 20:58:38 · 68 阅读 · 0 评论 -
合并两个有序链表
将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4//思路:建立个哨兵节点,再创建一个指针指向哨兵节点,两个链表都不为空的时候,开始比较,归并的思路,最后进行判断,哪个不为空,让指针的next指向这个链表...原创 2020-03-20 20:51:06 · 64 阅读 · 0 评论 -
反转链表
反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL/***Definitionforsingly-linkedlist.*publicclassListNode{*intval;*ListNode...原创 2020-03-20 01:09:41 · 62 阅读 · 0 评论 -
用栈实现队列
使用栈实现队列的下列操作:push(x) -- 将一个元素放入队列的尾部。pop() -- 从队列首部移除元素。peek() -- 返回队列首部的元素。empty() -- 返回队列是否为空。示例:MyQueue queue = new MyQueue();queue.push(1);queue.push(2); queue.peek(); // 返回 1queue....原创 2020-03-18 00:13:45 · 81 阅读 · 0 评论 -
用队列实现栈
使用队列实现栈的下列操作:push(x) -- 元素 x 入栈pop() -- 移除栈顶元素top() -- 获取栈顶元素empty() -- 返回栈是否为空注意:你只能使用队列的基本操作-- 也就是push to back, peek/pop from front, size, 和is empty这些操作是合法的。你所使用的语言也许不支持队列。你可以使用 list 或者...原创 2020-03-18 00:05:50 · 109 阅读 · 0 评论 -
最小栈
设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。push(x)-- 将元素 x 推入栈中。pop()-- 删除栈顶的元素。top()-- 获取栈顶元素。getMin() -- 检索栈中的最小元素。示例:MinStack minStack = new MinStack();minStack.push(-2);minStack.push(0)...原创 2020-03-17 16:56:43 · 53 阅读 · 0 评论