剑指offer刷题
白色彩虹
这个作者很懒,什么都没留下…
展开
-
剑指offer刷题 矩阵中的路径
题目描述请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则之后不能再次进入这个格子。 例如 a b c e s f c s a d e e 这样的3 X 4 矩阵中包含一条字符串"bcced"的路径,但是矩阵中不包含"abcb"路径,因为字符...原创 2019-04-27 14:18:55 · 100 阅读 · 0 评论 -
剑指offer刷题 数据流中的中位数
题意如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。样例输入:1, 2, 3, 4输出:1,1.5,2,2.5解释:每当数据流读入一个数据,就进行一次判断并输出当前的中位数。思路:这道题的思路比较巧妙,定义了两个堆来动态的维护数据流的中位数难点...转载 2019-04-30 15:06:57 · 90 阅读 · 0 评论 -
剑指offer刷题 二叉搜索树的后序遍历序列
题意输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回true,否则返回false。假设输入的数组的任意两个数字都互不相同。样例输入:[4, 8, 6, 12, 16, 14, 10]输出:true思路注意这里是二叉搜索树的后序遍历所以根结点一定在后面最后一个元素,思路和二叉树的重建是一样的在后序遍历的数组中找到左子树的区间和右子树的区间class So...翻译 2019-04-30 15:31:06 · 166 阅读 · 0 评论 -
剑指offer刷题 滑动窗口的最大值
题意给定一个数组和滑动窗口的大小,请找出所有滑动窗口里的最大值。例如,如果输入数组[2, 3, 4, 2, 6, 2, 5, 1]及滑动窗口的大小3,那么一共存在6个滑动窗口,它们的最大值分别为[4, 4, 6, 6, 6, 5]。样例输入:[2, 3, 4, 2, 6, 2, 5, 1] , k=3输出: [4, 4, 6, 6, 6, 5]思路:观察这道题目是一种先进先出的情况,所...翻译 2019-04-30 15:52:51 · 115 阅读 · 0 评论 -
剑指offer刷题 股票的最大利润
题意假设把某股票的价格按照时间先后顺序存储在数组中,请问买卖 一次 该股票可能获得的利润是多少?例如一只股票在某些时间节点的价格为[9, 11, 8, 5, 7, 12, 16, 14]。如果我们能在价格为5的时候买入并在价格为16时卖出,则能收获最大的利润11。样例输入:[9, 11, 8, 5, 7, 12, 16, 14]输出:11思路 枚举出每次在什么时候进行股票的卖出cl...翻译 2019-04-30 16:03:47 · 176 阅读 · 0 评论 -
剑指offer 分行从上往下打印二叉树
题意从上到下按层打印二叉树,同一层的结点按从左到右的顺序打印,每一层打印到一行。样例输入如下图所示二叉树[8, 12, 2, null, null, 6, null, 4, null, null, null]输出:[[8], [12, 2], [6], [4]]思路:用bfs进行宽度优先搜索这里有一个小技巧每一层遍历完后如何进行结算可以在每一层遍历完成后加上一个空指针不分行从上往下...翻译 2019-04-30 17:08:43 · 158 阅读 · 0 评论 -
剑指offer刷题 数组中出现次数超过一半的数字和求一个无序数组的中位数
题意数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。假设数组非空,并且一定存在满足条件的数字。要求只能使用 O(n) 的时间和额外 O(1) 的空间样例输入:[1,2,1,1,3]输出:1这是一道非常经典的面试题很多公司的面试官喜欢出这道题目 注意这里的是无序数组小提示:如果面试题是要求在排序的数组(或者部分排序的数组)中查找一个数字或者统计某个数字出现的次数,我们都...原创 2019-05-06 15:27:57 · 455 阅读 · 0 评论 -
关于各种子数组的和sum小于或者等于k这一类问题的总结
这种类型的情况可以分为两大类1、当数组中全是正数的时候 用双指针算法2、当数组中包括负数的时候用 前缀和 单调队列如果在使用前缀和求解的过程中 时间复杂度超时的情况优化的方法主要有1、hash表 2、单调队列209. Minimum Size Subarray SumGiven an array of n positive integers and a positive integ...原创 2019-05-06 15:35:07 · 1293 阅读 · 1 评论 -
剑值offer刷题 找出数组中重复的数字
可以修改数组找出数组中重复的数字给定一个长度为 n+1 的数组nums,数组中所有的数均在 1∼n 的范围内,其中 n≥1。请找出数组中任意一个重复的数,但不能修改输入的数组。样例给定 nums = [2, 3, 5, 4, 3, 2, 6, 7]。返回 2 或 3。要求 如果只能使用 O(1) 的额外空间和使用o(n)的时间来解决思路寻找重复的元素很容易想到用hash表进行遍历如...原创 2019-05-06 20:59:02 · 311 阅读 · 0 评论 -
剑指offer刷题 数字排列
题意输入一组数字(可能包含重复数字),输出其所有的排列方式样例输入:[1,2,3]输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]注意这里数组中的元素会出现相同的情况,如果是不相同的数算法简单一下方案数是(n!)这道题目的思路是采用枚举的方法把数字填入坑中,但是如何处理数字相同的情况?方法是先通过sort排序把数字...原创 2019-05-03 19:48:55 · 257 阅读 · 0 评论 -
剑指offer刷题 数组中只出现一次的两个数字
数组中只出现一次的两个数字题意一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。你可以假设这两个数字一定存在。样例输入:[1,2,3,3,4,4]输出:[1,2]思路 一看到这种数组中只出现几次的数字就要想到用位运算的性质进行解答解题步骤1、先找到x和y异或的和2.找异或和的第k位是1,根据第k位是1还是0将集合进行分开最后得到的一个...原创 2019-05-02 20:15:29 · 137 阅读 · 0 评论 -
剑指offer刷题 重建二叉树
题目描述输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。思路递归建立二叉树先找到建立根节点然后建立左子树再建立右子树最后让根节点的指针指向左子树,让根节点的指针指向右子树需要在中序遍历中找到根结点的小标所...原创 2019-04-27 16:36:04 · 76 阅读 · 0 评论 -
剑指offer刷题 二叉树的下一个节点
题目描述给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。样例假定二叉树是:[2, 1, 3, null, null, null, null], 给出的是值等于2的节点。则应返回值等于3的节点。解释:该二叉树的结构如下,2的后继节点是3。2/ 1 31、这到题目的核心是分情况讨论1当前节点有右...原创 2019-04-27 19:47:44 · 93 阅读 · 0 评论 -
剑指offer刷题 不用加减乘除做加法
题意写一个函数,求两个整数之和,要求在函数体内不得使用+、-、×、÷ 四则运算符号。样例输入:num1 = 1 , num2 = 2输出:3思路:这道题目的用的计算机里位运算先算不进位加法+进位加法 当两个数是一位的情况的条件下 不进位=num1或num2 进位=num1&num2代码class Solution {public: int add(int num1,...翻译 2019-05-02 16:25:37 · 104 阅读 · 0 评论 -
剑指offer刷题 构建乘积数组
题意给定一个数组A[0, 1, …, n-1],请构建一个数组B[0, 1, …, n-1],其中B中的元素B[i]=A[0]×A[1]×… ×A[i-1]×A[i+1]×…×A[n-1]样例输入:[1, 2, 3, 4, 5]输出:[120, 60, 40, 30, 24]思路:这道题目的思路每次遍历的时候把当前位左边的乘积算出来和右边的乘积算出来所以可以开辟两个数组把一个数组存当前索...原创 2019-05-02 16:37:20 · 90 阅读 · 0 评论 -
剑指offer刷题 数组中数值和下标相等的元素
题意假设一个单调递增的数组里的每个元素都是整数并且是唯一的。请编程实现一个函数找出数组中任意一个数值等于其下标的元素。例如,在数组[-3, -1, 1, 3, 5]中,数字3和它的下标相等。样例输入:[-3, -1, 1, 3, 5]输出:3注意:如果不存在,则返回-1。注意这道题目存在 log(n) 的时间复杂度第一中方法 遍历 时间复杂度o(n)public: in...原创 2019-05-02 16:59:54 · 269 阅读 · 0 评论 -
剑指offer刷题 翻转单词顺序
题意输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串"I am a student.",则输出"student. a am I"样例输入:“I am a student.”输出:“student. a am I”这种题型的思路主要拆成几个步骤来 1先翻转整个字符串 2每个单词进行翻转class Solution ...翻译 2019-05-02 17:26:20 · 132 阅读 · 0 评论 -
剑指offer刷题 合并两个排序的链表
题意输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然是按照递增排序的。样例输入:1->3->5 , 2->4->5输出:1->2->3->4->5->5思路定义一个虚拟头节点进行遍历 class Solution { public: ListNode* merge(ListNode* l1, Li...原创 2019-05-02 19:04:48 · 349 阅读 · 0 评论 -
剑指offer刷题 丑数
题意我们把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。求第n个丑数的值。样例输入:5输出:5注意:习惯上我们把1当做第一个丑数。这道题意的思路比较巧妙刚开始的时候让三个指针都指向1然后发现谁相等就将指针++,其实质是用到了数组中多路归并的思想进行合并class Solution {public: int...原创 2019-05-15 16:01:07 · 130 阅读 · 0 评论