![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
剑指offer
剑指offer刷题笔记
probeTS
这个作者很懒,什么都没留下…
展开
-
[剑指offer] 数字排列
数字排列题目输入一组数字(可能包含重复数字),输出其所有的排列方式。样例输入:[1, 2, 3]输出:[ [1, 2, 3], [1, 3, 2], [2, 1, 3],...原创 2020-03-04 20:50:14 · 154 阅读 · 0 评论 -
[剑指offer] 0到n-1中缺失的数字
0到n-1中缺失的数字题目一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0到n-1之内。在范围0到n-1的n个数字中有且只有一个数字不在该数组中,请找出这个数字。样例输入:[0,1,2,4] 输出:3题解一思路枚举法注意当所有数都满足 nums[i] == i 时,表示缺失的是 nclass Solution {public: ...原创 2020-02-25 09:35:09 · 135 阅读 · 0 评论 -
[剑指offer] 数组中数值和下标相等的元素
数组中数值和下标相等的元素题目假设一个单调递增的数组里的每个元素都是整数并且是唯一的。请编程实现一个函数找出数组中任意一个数值等于其下标的元素。例如,在数组[-3, -1, 1, 3, 5]中,数字3和它的下标相等。注意:如果不存在,则返回-1。输入样例输入:[-3, -1, 1, 3, 5] 输出:3题解思路二分法class Solution {public:...原创 2020-02-24 17:40:11 · 219 阅读 · 0 评论 -
[剑指offer]字符流中第一个只出现一次的字符
字符流中第一个只出现一次的字符题目请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符”go”时,第一个只出现一次的字符是’g’。当从该字符流中读出前六个字符”google”时,第一个只出现一次的字符是’l’。如果当前字符流没有存在出现一次的字符,返回#字符。样例输入:“google”输出:“ggg#ll”解释:每当字符流读入一个字符,就进行...原创 2020-02-08 20:08:37 · 140 阅读 · 0 评论 -
[剑指offer]最长不含重复字符的子字符串
最长不含重复字符的子字符串题目请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。假设字符串中只包含从’a’到’z’的字符。样例输入:“abcabc”输出:3题解双指针算法i、j 维护相关不重复的子串class Solution {public: int longestSubstringWithoutDuplication(strin...原创 2020-02-08 16:33:03 · 80 阅读 · 0 评论 -
[剑指offer]把数组排成最小的数
把数组排成最小的数题目输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组[3, 32, 321],则打印出这3个数字能排成的最小数字321323。注意输出数字的格式为字符串。样例输入:[3, 32, 321]输出:321323题解编写一个比较器函数cmpclass Solution {public: stat...原创 2020-02-01 19:26:16 · 130 阅读 · 0 评论 -
[剑指offer]把数字翻译成字符串
把数字翻译成字符串题目给定一个数字,我们按照如下规则把它翻译为字符串:0翻译成”a”,1翻译成”b”,……,11翻译成”l”,……,25翻译成”z”。一个数字可能有多个翻译。例如12258有5种不同的翻译,它们分别是”bccfi”、”bwfi”、”bczi”、”mcfi”和”mzi”。请编程实现一个函数用来计算一个数字有多少种不同的翻译方法。样例输入:“12258”输出:5题...原创 2020-02-01 19:10:19 · 120 阅读 · 0 评论 -
[剑指offer]丑数
丑数题目我们把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。求第n个丑数的值。注意习惯上我们把1当做第一个丑数。样例输入:5输出:5题解思路这题可以理解为求只包含2,3,5质数因为的数的从小到大的集合第一路是包含质因子2的所有数的集合,第二路是包含3的质因子的所有数的集合,第三路是包含5的质因子的所...原创 2020-02-01 17:16:07 · 191 阅读 · 0 评论 -
[剑指offer]数据流中的中位数
数据流中的中位数题目如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。样例输入:1, 2, 3, 4输出:1, 1.5, 2, 2.5解释:每当数据流读入一个数据,就进行一次判断并输出当前的中位数。题解利用大根堆存储前 n / 2 到 n ...原创 2020-02-01 16:08:32 · 148 阅读 · 0 评论 -
[剑指offer]0到n-1中缺失的数字
0到n-1中缺失的数字题目一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0到n-1之内。在范围0到n-1的n个数字中有且只有一个数字不在该数组中,请找出这个数字。样例输入:[0, 1, 2, 4]输出:3题解如果该数字在数组中的和为 n * (n + 1) / 2,那么,该数字在数组中的和减去该数字不在数组中的和即为该数字class Solutio...原创 2020-02-01 15:20:09 · 192 阅读 · 0 评论 -
[剑指offer]股票的最大利润
股票的最大利润题目假设把某股票的价格按照时间先后顺序存储在数组中,请问买卖 一次 该股票可能获得的利润是多少?例如一只股票在某些时间节点的价格为[9, 11, 8, 5, 7, 12, 16, 14]。如果我们能在价格为5的时候买入并在价格为16时卖出,则能收获最大的利润11。样例输入:[9, 11, 8, 5, 7, 12, 16, 14] 输出:11题解当天股票价值减去之...原创 2020-02-01 14:56:40 · 138 阅读 · 0 评论 -
[剑指offer]不用加减乘除做加法
不用加减乘除做加法题目写一个函数,求两个整数之和,要求在函数体内不得使用+、-、×、÷ 四则运算符号。样例输入:num1 = 1 , num2 = 2输出:3题解思路两个整数做异或运算 ^,得到各位相加不进位的运算结果两个整数做与运算 &,然后再左移一位,即得到进位的运算结果将上面两个结果相加,再重复步骤 1 和 2,直至进位的运算结果为0class Solu...原创 2020-02-01 11:47:34 · 101 阅读 · 0 评论 -
[剑指offer]滑动窗口的最大值
滑动窗口的最大值题目给定一个数组和滑动窗口的大小,请找出所有滑动窗口里的最大值。例如,如果输入数组[2, 3, 4, 2, 6, 2, 5, 1]及滑动窗口的大小3,那么一共存在6个滑动窗口,它们的最大值分别为[4, 4, 6, 6, 6, 5]。注意数据保证k大于0,且k小于等于数组长度。样例输入:[2, 3, 4, 2, 6, 2, 5, 1] , k=3输出: [4, 4,...原创 2020-02-01 11:22:37 · 106 阅读 · 0 评论 -
[剑指offer]圆圈中最后剩下的数字
圆圈中最后剩下的数字题目0, 1, …, n-1这n个数字(n>0)排成一个圆圈,从数字0开始每次从这个圆圈里删除第m个数字。求出这个圆圈里剩下的最后一个数字。样例输入:n=5 , m=3输出:3题解约瑟夫环问题class Solution {public: int lastRemaining(int n, int m){ if (n == 1...原创 2020-01-31 19:47:41 · 137 阅读 · 0 评论 -
[剑指offer]树中两个结点的最低公共祖先
树中两个结点的最低公共祖先题目给出一个二叉树,输入两个树节点,求它们的最低公共祖先。一个树节点的祖先节点包括它本身。注意输入的二叉树不为空;输入的两个节点一定不为空,且是二叉树中的节点;样例二叉树 [8, 12, 2, null, null, 6, 4, null, null, null, null] 如下图所示: 8&nb...原创 2020-01-31 17:23:19 · 202 阅读 · 0 评论 -
[剑指offer]数组中只出现一次的两个数字
和为S的连续正数序列题目一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。你可以假设这两个数字一定存在。样例输入:[1, 2, 3, 3, 4, 4]输出:[1, 2]题解原理两个相同的数字相异或后为 0思路将所给序列中的所有数进行异或运算得到结果 sum随机取 sum 中第 tag 位为1的数,并记录 tag将所给序...原创 2020-01-31 16:33:36 · 140 阅读 · 0 评论 -
[剑指offer]和为S的连续正数序列
和为S的连续正数序列题目输入一个正数s,打印出所有和为s的连续正数序列(至少含有两个数)。例如输入15,由于1+2+3+4+5=4+5+6=7+8=15,所以结果打印出3个连续序列1~5、4~6和7~8。样例输入:15输出:[[1,2,3,4,5],[4,5,6],[7,8]]题解双指针算法设置两个指针i和j,分别指向连续正数序列的起始和终止当当前和 s == sum时,...原创 2020-01-31 15:30:16 · 128 阅读 · 0 评论 -
[剑指offer]复杂链表的复刻
复杂链表的复刻题目请实现一个函数可以复制一个复杂链表。在复杂链表中,每个结点除了有一个指针指向下一个结点外,还有一个额外的指针指向链表中的任意结点或者null。注意函数结束后原链表要与输入时保持一致。样例输入:[[1, 1], [0, 2], [1, 4], [3, -1], [3, 2]]输出:[[1, 1], [0, 2], [1, 4], [3, -1], [3, 2]...原创 2020-01-31 11:20:41 · 201 阅读 · 0 评论 -
[剑指offer]二叉搜索树与双向链表
二叉搜索树与双向链表题目输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。注意需要返回双向链表最左侧的节点。样例输入下图中左边的二叉搜索树,则输出右边的排序双向链表。题解通过中序遍历构造单链表,然后,当单链表构造完成后,再构造双向链表/** * Definition for a binary tree no...原创 2020-01-31 10:43:41 · 168 阅读 · 0 评论 -
[剑指offer]二叉搜索树的后序遍历序列
二叉搜索树的后序遍历序列题目输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回true,否则返回false。假设输入的数组的任意两个数字都互不相同。样例输入:[4, 8, 6, 12, 16, 14, 10]输出:true题解以二叉搜索树根节点为界,根节点左边的必然都小于根节点,根节点右边的必然都大于根节点,如果违背该原则,则说明该数组不是某二叉搜索...原创 2020-01-31 10:15:18 · 139 阅读 · 0 评论 -
[剑指offer]两个链表的第一个公共结点
两个链表的第一个公共结点题目输入两个链表,找出它们的第一个公共结点。当不存在公共节点时,返回空节点。样例给出两个链表如下所示: A: a1 → a2 &nb...原创 2020-01-30 15:55:10 · 132 阅读 · 0 评论 -
[剑指offer]连续子数组的最大和
连续子数组的最大和题目输入一个 非空 整型数组,数组里的数可能为正,也可能为负。数组中一个或连续的多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。样例输入:[1, -2, 3, 10, -4, 7, 2, -5]输出:18题解思路如果当前数前面的最大序列和sum小于0,故当前数加上sum为负收益,则将sum归为0,再加上当前数如果当前数前面...原创 2020-01-30 15:01:41 · 123 阅读 · 0 评论 -
[剑指offer]最小的k个数
最小的k个数题目输入n个整数,找出其中最小的k个数。注意数据保证k一定小于等于输入数组的长度;输出数组内元素请按从小到大顺序排序;样例输入:[1,2,3,4,5,6,7,8] , k=4输出:[1,2,3,4]题解1排序即可class Solution {public: vector<int> getLeastNumbers_Solution(v...原创 2020-01-30 11:43:04 · 111 阅读 · 0 评论 -
[剑指offer]二叉树中和为某一值的路径
二叉树中和为某一值的路径题目输入一棵二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。样例给出二叉树如下所示,并给出num=22。 5 / \ &nb...原创 2020-01-30 10:56:09 · 127 阅读 · 0 评论 -
[剑指offer]之字形打印二叉树
分行从上往下打印二叉树题目从上到下按层打印二叉树,同一层的结点按从左到右的顺序打印,每一层打印到一行。样例输入如下图所示二叉树 [8, 12, 2, null, null, 6, null, 4, null, null, null] 8 / \ 12 ...原创 2020-01-30 09:55:11 · 115 阅读 · 0 评论 -
[剑指offer]顺时针打印矩阵
顺时针打印矩阵题目输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。样例输入:[ [1, 2, 3, 4], [5, 6, 7, 8], [9,10,11,12]]输出:[1,2,3,4,8,12,11,10,9,5,6,7]题解首先,使用一个布尔数组...原创 2020-01-29 22:32:08 · 117 阅读 · 0 评论 -
[剑指offer]树的子结构
树的子结构题目输入两棵二叉树A,B,判断B是不是A的子结构。我们规定空树不是任何树的子结构。样例树A: 8 / \ 8 7 / \ ...原创 2020-01-29 19:40:19 · 104 阅读 · 0 评论 -
[剑指offer]调整数组顺序使奇数位于偶数前面
调整数组顺序使奇数位于偶数前面题目输入一个整数数组,实现一个函数来调整该数组中数字的顺序。使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分。样例输入:[1,2,3,4,5] 输出:[1,3,5,2,4]题解双指针算法,i 指针指向数组头,j 指针指向数组尾,j 指针遇到奇数停止递减,i 指针遇到偶数停止递增,然后交换两个指针所指向的数值,不断迭代至两指针相遇cl...原创 2020-01-29 16:50:10 · 473 阅读 · 0 评论 -
[剑指offer]二进制中1的个数
二进制中1的个数题目输入一个32位整数,输出该数二进制表示中1的个数。注意:负数在计算机中用其绝对值的补码来表示。样例1输入:9输出:2解释:9的二进制表示是1001,一共有2个1。样例2输入:-2输出:31解释:-2在计算机里会被表示成11111111111111111111111111111110一共有31个1。题解由于负数右移高位自动补1,故如果直接...原创 2020-01-29 15:44:17 · 255 阅读 · 0 评论 -
[剑指offer]剪绳子
剪绳子题目给你一根长度为 n 绳子,请把绳子剪成 m 段(m、n 都是整数,2≤n≤58 并且 m≥2)。每段的绳子的长度记为k[0]、k[1]、……、k[m]。k[0]k[1] … k[m] 可能的最大乘积是多少?例如当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到最大的乘积18。样例输入:8 输出:18题解原理当 n < 5 时,由于至少切成...原创 2020-01-29 15:23:11 · 179 阅读 · 0 评论 -
[剑指offer]不修改数组找出重复的数字
不修改数组找出重复的数字题目给定一个长度为 n+1 的数组nums,数组中所有的数均在 1∼n 的范围内,其中 n≥1。请找出数组中任意一个重复的数,但不能修改输入的数组。样例给定 nums = [2, 3, 5, 4, 3, 2, 6, 7]。返回 2 或 3。思考题:如果只能使用 O(1) 的额外空间,该怎么做呢?题解利用unordered_map的count方法,来判断...原创 2020-01-28 10:50:36 · 203 阅读 · 0 评论 -
[剑指offer]二维数组中的查找
二维数组中的查找题目在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。样例输入数组:[ [1,2,8,9], [2,4,9,12], &n...原创 2020-01-28 16:24:43 · 180 阅读 · 0 评论 -
[剑指offer]重建二叉树(根据前序中序得到二叉树)
重建二叉树题目输入一棵二叉树前序遍历和中序遍历的结果,请重建该二叉树。注意:二叉树中每个节点的值都互不相同;输入的前序遍历和中序遍历一定合法;样例给定:前序遍历是:[3, 9, 20, 15, 7]中序遍历是:[9, 3, 15, 20, 7]返回:[3, 9, 20, null, null, 15, 7, null, null, null, null]返回的二叉树如下...原创 2020-01-28 17:26:26 · 1242 阅读 · 0 评论 -
[剑指offer]二叉树的下一个节点
二叉树的下一个节点题目给定一棵二叉树的其中一个节点,请找出中序遍历序列的下一个节点。注意:如果给定的节点是中序遍历序列的最后一个,则返回空节点;二叉树一定不为空,且给定的节点一定不是空节点;样例假定二叉树是:[2, 1, 3, null, null, null, null], 给出的是值等于2的节点。则应返回值等于3的节点。解释:该二叉树的结构如下,2的后继节点是3。&n...原创 2020-01-28 21:48:36 · 426 阅读 · 0 评论 -
[剑指offer]矩阵中的路径
矩阵中的路径题目请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则之后不能再次进入这个格子。注意:输入的路径不为空;所有出现的字符均为大写英文字母;样例matrix= [ [“A”,“...原创 2020-01-29 10:40:27 · 255 阅读 · 0 评论 -
[剑指offer]机器人的运动范围
机器人的运动范围题目地上有一个 m 行和 n 列的方格,横纵坐标范围分别是 0∼m−1 和 0∼n−1。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格。但是不能进入行坐标和列坐标的数位之和大于 k 的格子。请问该机器人能够达到多少个格子?注意:0<=m<=500<=n<=500<=k<=100样例1输...原创 2020-01-29 11:57:54 · 1021 阅读 · 0 评论