
剑指offer
使用C++结合Leetcode实践面试题
D.Guan
怕什么真理无穷 进一步有进一步的欢喜
展开
-
[leetcode.107]二叉树的层次遍历II
1.题目给定一个二叉树,返回其节点值自底向上的层次遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)例如:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回其自底向上的层次遍历为:[ [15,7], [9,20], [3]]来源:力扣(LeetCo...原创 2019-09-14 14:10:02 · 357 阅读 · 0 评论 -
[剑指offer][Leetcode.104]二叉树的最大深度
题目给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例: 给定二叉树 [3,9,20,null,null,15,7],返回它的最大深度 3 。分析递归方法我们如何求解深度呢,如果没有节点,返回0。如果只有一个节点,那么深度为1.如果只有左子树,没有右子树,那么深度是左子树的深度+1,反之亦然。如...原创 2020-02-11 21:52:20 · 230 阅读 · 0 评论 -
[leetcode.101]对称二叉树
1.题目给定一个二叉树,检查它是否是镜像对称的。例如,二叉树 [1,2,2,3,4,4,3] 是对称的。 1 / \ 2 2/ \ / \3 4 4 3但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的: 1 / \ 2 2 \ \ 3 32.code/** ...原创 2019-09-11 15:58:24 · 338 阅读 · 0 评论 -
[Leetcode.100]相同的树
1.题目给定两个二叉树,编写一个函数来检验它们是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。示例 1:输入: 1 1 / \ / \ 2 3 2 3 [1,2,3], [1,2,3]输出: true示例 2:输入: ...原创 2019-09-10 21:55:54 · 339 阅读 · 0 评论 -
[剑指offfer]面试题8:二叉树的下一个节点
1.题目给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。2.code/*struct TreeLinkNode { int val; struct TreeLinkNode *left; struct TreeLinkNode *right; struct Tr...原创 2019-10-26 15:17:24 · 202 阅读 · 0 评论 -
[剑指offer][[Leetcode]面试题7:重建二叉树
1.题目输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。2.code/** * Definition for binary tree * struct TreeNode { * i...原创 2019-10-26 14:14:07 · 211 阅读 · 0 评论 -
[剑指offer][leetcode.142]环形链表II
题目给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是-1,则在该链表中没有环。说明:不允许修改给定的链表。示例 1:输入:head = [3,2,0,-4], pos = 1 输出:tail connects to node index 1...原创 2020-02-08 15:17:04 · 337 阅读 · 0 评论 -
[剑指offer][leetcode.141]环形链表
题目给定一个链表,判断链表中是否有环。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。示例 1:输入:head = [3,2,0,-4], pos = 1输出:true解释:链表中有一个环,其尾部连接到第二个节点。示例 2:输入:head = [1,2], pos = 0输出:...原创 2020-02-08 15:04:13 · 312 阅读 · 0 评论 -
[剑指offer][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 ...原创 2020-02-08 01:40:45 · 233 阅读 · 0 评论 -
[剑指offer][Leetcode.234]回文链表
题目请判断一个链表是否为回文链表。示例 1:输入: 1->2输出: false示例 2:输入: 1->2->2->1输出: true进阶:你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题?分析判断一个链表是否为回文链表,首先需要找到中点,然后进行对比。于是,采用快慢指针找到中点。在找中点的时候,我们采用慢指针,边遍历边反转。当我...原创 2020-02-08 00:40:49 · 202 阅读 · 0 评论 -
[剑指offer][leetcode.92]反转链表II
题目反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。说明:1 ≤ m ≤ n ≤ 链表长度。示例:输入: 1->2->3->4->5->NULL, m = 2, n = 4输出: 1->4->3->2->5->NULL分析使用头插法进行反转,也就是不断地将需要反转的节点插在前面。为了方便,我们新建一个哨兵...原创 2020-02-07 20:21:06 · 133 阅读 · 0 评论 -
[剑指offer][leetcode.206]反转链表
题目反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL进阶:你可以迭代或递归地反转链表。你能否用两种方法解决这道题?分析1.迭代反转对于一个没有头节点的链表进行反转:起码需要只要反转哪个节点(pcur)以及反转后指向哪个节点(pre)。迭代过程需要更...原创 2020-02-07 18:00:08 · 228 阅读 · 1 评论 -
[剑指offer][leetcode]面试22:链表中倒数第k个节点
题目输入一个链表,输出该链表中倒数第k个结点。分析类似于链表的中间节点,我们采用快慢指针通过遍历一次链表解决这个问题。我们要找的是倒数第k个节点,倒数第k个节点和最后一个节点距离是k-1。由此,如果快指针和慢指针相距k-1个节点,当快指针到达最后一个节点的时候,慢指针刚好到达倒数第k个节点。所以我们设立两个指针,快指针先走k-1步,然后两个指针同时开始走,当快指针到末尾的时候,慢指针到达...原创 2020-02-07 16:53:28 · 503 阅读 · 0 评论 -
[剑指offer][leetcode.876]链表的中间节点
题目给定一个带有头结点 head 的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。 示例 1:输入:[1,2,3,4,5]输出:此列表中的结点 3 (序列化形式:[3,4,5])返回的结点值为 3 。 (测评系统对该结点序列化表述是 [3,4,5])。注意,我们返回了一个 ListNode 类型的对象 ans,这样:ans.val = 3, ...原创 2020-02-07 16:21:09 · 296 阅读 · 0 评论 -
[剑指offer][leetcode.83]删除排序链表中的重复元素
题目给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。示例 1:输入: 1->1->2输出: 1->2示例 2:输入: 1->1->2->3->3输出: 1->2->3分析和移除链表元素同理,只是比较的是相邻元素。ListNode* deleteDuplicates(ListNode* head) {...原创 2020-02-06 18:56:03 · 164 阅读 · 0 评论 -
[剑指offer][leetcode.203]移除链表元素
题目删除链表中等于给定值 val 的所有节点。示例:输入: 1->2->6->3->4->5->6, val = 6输出: 1->2->3->4->5分析为了防止删除的是头节点,增加一个空的头节点,然后依次遍历就可以。如果当前节点是val,那么指向其的下一个节点。ListNode* removeElements(Li...原创 2020-02-06 18:51:25 · 150 阅读 · 0 评论 -
[剑指offer][leetcode.237]删除链表中的节点
题目请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除的节点。现有一个链表 – head = [4,5,1,9],它可以表示为:示例 1:输入: head = [4,5,1,9], node = 5输出: [4,1,9]解释: 给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9.示例 ...原创 2020-02-06 18:46:21 · 182 阅读 · 0 评论 -
[剑指offer][leetcode]面试题18:删除链表的节点
1. 在O(1)时间内删除链表节点给定一个单向链表的头指针和一个节点指针,定义一个函数在O(1)时间内删除该节点。首先定义一个结构体表示链表元素typedef struct ListNode* Link;//写一个包括链表结构的结构体struct ListNode{ int val; struct ListNode* next;};将链表元素存储在数组中...原创 2020-02-06 18:36:03 · 350 阅读 · 0 评论 -
[剑指offer][链表]面试题6:从尾到头打印链表
题目输入一个链表,按链表从尾到头的顺序返回一个ArrayList。分析从尾到头要求先遍历到的后面输出,也就是先进后出。所以我们使用栈来保存从前到后遍历的元素即可。 vector<int> printListFromTailToHead(ListNode* head) { //先进后出的思想 stack<int>s; ...原创 2020-01-30 19:50:48 · 153 阅读 · 0 评论 -
[Leetcode.125]验证回文串
题目给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。说明:本题中,我们将空字符串定义为有效的回文串。示例 1:输入: "A man, a plan, a canal: Panama"输出: true示例 2:输入: "race a car"输出: false分析我们使用双指针来做,iii一个指针指向开头,jjj一个指针指向结尾。如果相...原创 2020-01-30 17:06:49 · 148 阅读 · 0 评论 -
[Leetcode.88][数组]合并两个有序数组
提要这是一道根据面试题5:替换空格从后向前遍历的一道拓展题。题目给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组。说明:初始化 nums1 和 nums2 的元素数量分别为 m 和 n。你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。示例:输入:n...原创 2020-01-30 15:41:52 · 167 阅读 · 0 评论 -
[剑指offer][字符串]面试题5:替换空格
题目请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。分析这道题是一道字符串处理的题,从前向后遍历,如果遇到空格,就将后面的元素向后移动两位。如此一来,如果有n个空格,后面的串就要移动n次,时间复杂度为O(n2)O(n^2)O(n2)。需要明确的是,每次遇到空格处理之后,串尾的长度...原创 2020-01-30 15:11:57 · 195 阅读 · 0 评论 -
[Leetcode]数组形式的整数加法
题目对于非负整数 X 而言,X 的数组形式是每位数字按从左到右的顺序形成的数组。例如,如果 X = 1231,那么其数组形式为 [1,2,3,1]。给定非负整数 X 的数组形式 A,返回整数 X+K 的数组形式。示例 1:输入:A = [1,2,0,0], K = 34输出:[1,2,3,4]解释:1200 + 34 = 1234示例 2:输入:A = [2,7,4], K = ...原创 2020-01-29 22:33:08 · 195 阅读 · 0 评论 -
[剑指offer]面试题4:二维数组中的查找
二维数组中的查找在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。这道题需要观察数据的规律,我们会发现从右上角的元素开始比较,就可以轻松判断。如果比右上角的元素大,那么就只能向下着;如果比右上角的元素小,那么只能向左找。public: bo...原创 2020-01-28 22:36:19 · 164 阅读 · 0 评论 -
[剑指offer]面试题3+:数组中的重复元素
根据剑指offer数组中的重复元素,我在Leetcode上面找了几道类似的题进行练习。1.删除排序数组中的重复项I(Leetcode.26)给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。示例 1:给定数组 nums = [1,1,2], ...原创 2020-01-27 23:29:18 · 295 阅读 · 0 评论 -
剑指offer:面试题3:数组中重复的数字
1.数组介绍首先对数组进行基本的介绍,数组的特点就是连续存储。在C++中,我们一般有两种类型的数组:一种是静态数组,我们事先知道其大小。一种是动态数组,也就是vector,事先可以不规定大小。2.题目介绍这一类型题目有很多种类型,比如数组是否有序,重复元素的个数等等。2.1 找出数组中的重复元素在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有...原创 2020-01-27 17:31:43 · 349 阅读 · 0 评论