面试常见算法题
白色彩虹
这个作者很懒,什么都没留下…
展开
-
常见的面试题 leetcode225和232 用两个队列实现栈和用两个队列实现栈
leetcode225和232 用两个队列实现栈和用两个队列实现栈leetcode 232用两个栈实现队列核心思想:1、定义两个栈输入栈,输出栈,每次都把一个栈中的全部元素倒入另一个栈中输入队列维持输入,输出队列进行输出操作2、当两个栈都为空的时候实现的队列才为空,否则为tureleetcode AC代码如下class MyQueue {public: /** In...原创 2019-04-26 18:04:29 · 604 阅读 · 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 · 183 阅读 · 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 · 167 阅读 · 0 评论 -
剑指offer刷题 数组中出现次数超过一半的数字和求一个无序数组的中位数
题意数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。假设数组非空,并且一定存在满足条件的数字。要求只能使用 O(n) 的时间和额外 O(1) 的空间样例输入:[1,2,1,1,3]输出:1这是一道非常经典的面试题很多公司的面试官喜欢出这道题目 注意这里的是无序数组小提示:如果面试题是要求在排序的数组(或者部分排序的数组)中查找一个数字或者统计某个数字出现的次数,我们都...原创 2019-05-06 15:27:57 · 463 阅读 · 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 · 1385 阅读 · 1 评论 -
多路归并总结
23. Merge k Sorted ListsExample:Input:[1->4->5,1->3->4,2->6]Output: 1->1->2->3->4->4->5->6思路2.1. 方法一在 合并两个有序链表 的基础上,我们很容易想到第一种解法,首先我们将第一个链表和第二个链表合并成一个新的链...原创 2019-05-06 17:19:34 · 1104 阅读 · 0 评论 -
剑值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 · 324 阅读 · 0 评论 -
一致性hash的总结
1)一致性hash的总结经典的服务器结构前端有相同的hash函数然后经过mod%3把文件均匀的存储在1号、2号、3号服务器上这样可以让服务器负载均衡但是如果服务增加或者减少的话又要重新的进行hash函数的映射比如服务器增加到100台的话原来是hash(“hello”)%3现在要变成hash(“hello”)%100这样原理存储在1号2号3号服务器的数据就要重新进行迁移这样的数据量非常的大...原创 2019-05-10 11:37:55 · 241 阅读 · 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 · 141 阅读 · 0 评论 -
二叉树的前序遍历、中序遍历、后序遍历的非递归版本
二叉树的前序非递归遍历思路:对每个结点按照 根->右->左 的顺序入栈,出栈的顺序就是前序遍历的结果。class Solution {public: vector<int> preorderTraversal(TreeNode* root) { if(!root) return vector<int>();...原创 2019-05-15 16:16:46 · 409 阅读 · 0 评论 -
用二分查找法解决旋转数组的总结
用二分算法实现Sqrt(x)函数这道题用二分模板的第二个但是写的使用要注意mid*mid可能出现数据溢出的情况所以用mid*1ll*mid把int类型变成long long 类型class Solution {public: int mySqrt(int x) { int l=0,r=x; while(l<r) { ...原创 2019-05-15 16:44:26 · 342 阅读 · 0 评论 -
回文链表和链表排序
回文链表思路:找到链表的中间节点然后前面一部分进行逆置,变成两个链表,然后将值逐个进行比较样例Input: 1->2->2->1Output: trueclass Solution {public: bool isPalindrome(ListNode* head) { int lenth, i; ListNode *point...原创 2019-05-15 17:07:38 · 126 阅读 · 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 · 118 阅读 · 0 评论 -
剑指offer刷题 二叉搜索树的后序遍历序列
题意输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回true,否则返回false。假设输入的数组的任意两个数字都互不相同。样例输入:[4, 8, 6, 12, 16, 14, 10]输出:true思路注意这里是二叉搜索树的后序遍历所以根结点一定在后面最后一个元素,思路和二叉树的重建是一样的在后序遍历的数组中找到左子树的区间和右子树的区间class So...翻译 2019-04-30 15:31:06 · 172 阅读 · 0 评论 -
剑指offer刷题 二叉树的下一个节点
题目描述给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。样例假定二叉树是:[2, 1, 3, null, null, null, null], 给出的是值等于2的节点。则应返回值等于3的节点。解释:该二叉树的结构如下,2的后继节点是3。2/ 1 31、这到题目的核心是分情况讨论1当前节点有右...原创 2019-04-27 19:47:44 · 98 阅读 · 0 评论 -
剑指offer刷题 不用加减乘除做加法
题意写一个函数,求两个整数之和,要求在函数体内不得使用+、-、×、÷ 四则运算符号。样例输入:num1 = 1 , num2 = 2输出:3思路:这道题目的用的计算机里位运算先算不进位加法+进位加法 当两个数是一位的情况的条件下 不进位=num1或num2 进位=num1&num2代码class Solution {public: int add(int num1,...翻译 2019-05-02 16:25:37 · 110 阅读 · 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 · 101 阅读 · 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 · 277 阅读 · 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 · 140 阅读 · 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 · 355 阅读 · 0 评论 -
单链表的快速排序算法
**题意**在链表中用快排进行排序思路只需要两个指针p和q,这两个指针均往next方向移动,移动的过程中保持p之前的key都小于选定的key,p和q之间的key都大于选定的key,那么当q走到末尾的时候便完成了一次支点的寻找。struct Node { int key; Node* next; Node(int nKey, Node* pNex...转载 2019-05-02 19:09:48 · 1350 阅读 · 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 · 145 阅读 · 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 · 263 阅读 · 0 评论 -
剑指offer刷题 数据流中的中位数
题意如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。样例输入:1, 2, 3, 4输出:1,1.5,2,2.5解释:每当数据流读入一个数据,就进行一次判断并输出当前的中位数。思路:这道题的思路比较巧妙,定义了两个堆来动态的维护数据流的中位数难点...转载 2019-04-30 15:06:57 · 100 阅读 · 0 评论 -
记忆力搜索
题目:在数字矩阵中,从左上角到右下角,每次只能向右或向下,如何规划路径,能获得最大数字总和?思路1:使用贪心,每次都选取矩阵中最大的值,进行前进,但是这种方法得到的不是最优解,可能出现因小失去的情况思路2:使用搜索算法广度优先算法求解最优解深度优先算法求解全部解这里求全部解,并获取最大值,所用用深度优先算法如何提高效率呢?算法的优化其实就是减少不必要的计算可以使用记忆力搜索,这样可...翻译 2019-05-16 16:56:02 · 245 阅读 · 0 评论