面试题36. 二叉搜索树与双向链表 面试题37. 序列化二叉树 面试题36. 二叉搜索树与双向链表递归实现问题:栈溢出:[28,-98,67,null,-89,62,null,-97,-25,null,64,null,null,-72,-9,null,null,-88,-41,null,-7,null,-78,-53,null,null,2,-85,-77,-69,-42,-1]class Node {public: int ...
面试题32.1 从上往下打印二叉树 class Solution {public: vector<int> PrintFromTopToBottom(TreeNode* root) { vector<int> res; if(root==NULL) return res; queue<TreeNode*> q; ...
30.包含min函数的栈 与31.栈的压入、弹出序列 30.包含min函数的栈class Solution {public: vector<int> vec; int min_val=INT_MAX,min_cnt=0; void push(int value) { vec.push_back(value); if(min_cnt==0){ min_v...
对称的二叉树与顺时针打印矩阵 对称的二叉树class Solution {public: bool Compare(TreeNode* left,TreeNode* right){ if(left == NULL && right == NULL) return true; if(left == NULL || right == NULL)...
[剑指Offer]---26树的子结构与27二叉树的镜像 26树的子结构入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构)B是A的子结构, 即 A中有出现和B相同的结构和节点值。例如:给定的树 A:3/ \4 5/ \1 2给定的树 B:4/1返回 true,因为 B 与 A 的一个子树拥有相同的结构和节点值。示例 1:输入:A...
[剑指Offer]---反转链表与合并两个排序的链表 反转链表描述定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL限制:0 <= 节点个数 <= 5000class Solution {public: Li...
[剑指Offer]---21-调整数组顺序使奇数位于偶数前面 与22-链表中倒数第k个节点 21-调整数组顺序使奇数位于偶数前面描述输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。示例:输入:nums =[1,2,3,4]输出:[1,3,2,4]注:[3,1,2,4] 也是正确的答案之一。提示:1 <= nums.length <= 500001 <= nu...
[剑指Offer]---19-正则表达式匹配与20-表示数值的字符串 19-正则表达式匹配描述请实现一个函数用来匹配包含'. '和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(含0次)。在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但与"aa.a"和"ab*a"均不匹配。示例 1:输入:s = "aa"p = "a"输出: fa...
[剑指Offer]---17-打印从1到最大的n位数与18-删除链表的节点 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: vector...
[剑指Offer]---14- II剪绳子II 与15二进制中1的个数 与16数值的整数次方 14- II剪绳子II给你一根长度为 n 的绳子,请把绳子剪成整数长度的 m 段(m、n都是整数,n>1并且m>1),每段绳子的长度记为 k[0],k[1]...k[m] 。请问 k[0]*k[1]*...*k[m] 可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。答案需要取模 1e9+7(1000000007...
[剑指Offer]---13机器人的运动范围与14- I 剪绳子 13 机器人的运动范围描述地上有一个m行n列的方格,从坐标 [0,0] 到坐标 [m-1,n-1] 。一个机器人从坐标 [0, 0] 的格子开始移动,它每次可以向左、右、上、下移动一格(不能移动到方格外),也不能进入行坐标和列坐标的数位之和大于k的格子。例如,当k为18时,机器人能够进入方格 [35, 37] ,因为3+5+3+7=18。但它不能进入方格 [35, 38],因为3+5+3...
[剑指Offer]---11 旋转数组的最小数字与12 矩阵中的路径 11 旋转数组的最小数字题目把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。 示例 1:输入:[3,4,5,1,2]输出:1示例 2:输入:[2,2,2,0,1]输出:0思路1...
[剑指Offer]---10-I 斐波那契数列与0-II 青蛙跳台阶问题 10-I 斐波那契数列题目写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项。斐波那契数列的定义如下:F(0) = 0, F(1) = 1F(N) = F(N - 1) + F(N - 2), 其中 N > 1.斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。答案需要取模 1e9+7(1000000007),如计...
[剑指Offer]---07重建二叉树与09用两个栈实现队列 07重建二叉树描述输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如,给出前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]返回如下的二叉树: 3 / \ 9 20 / \ 15 7限制:...
[剑指Offer]---05替换空格与06从尾到头打印链表 05替换空格描述请实现一个函数,把字符串 s 中的每个空格替换成"%20"。示例 1:输入:s = "We are happy."输出:"We%20are%20happy."限制:0 <= s 的长度 <= 10000思路非空格则直接加入,空格则替换 时间复杂度O(n) 空时间复杂度O(n)class Solution {...
[剑指Offer]---03数组中重复的数字与04二维数组中的查找 03数组中重复的数字思路:哈希表,扫描数组里的每个数字,看哈希表里是否有这个数字,没有就将这个数字加进去,有的话,则该数字重复。时间复杂度是O(n)。class Solution {public: int findRepeatNumber(vector<int>& nums) { unordered_set<int> r...
(九)高级IO 目录1.非阻塞IO1.1.阻塞读文件1.2.如何实现非阻塞读(1)打开文件时指定O_NONBLOCK状态标志(2)通过fcntl函数指定O_NONBLOCK来实现1.3.实现同时“读鼠标”和“读键盘”2.文件锁2.1.文件锁的作用2.2.多进程读写文件2.3.文件锁2.3.1.文件锁的读锁与写锁2.3.2.使用文件锁对文件进行保护2.3.3....
(八)C线程 1.线程为什么能弥补进程的缺点为什么线程切换的开销很低但是使用多线程来实现多线任务时,由于线程本质上它只是程序(进程)的一个函数,只不过线程函数与普通函数的区别是,普通函数时单线的运行关系,而线程函数被注册为线程后,是多线并发运行。 对于普通函数来说,只有相互调动时才会涉及函数间的切换,但是对于线程函数来说,只要运行时间片到了就会切换,...