![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
各种面试题
文章平均质量分 62
a83610312
这个作者很懒,什么都没留下…
展开
-
[各种面试题] 和大于S的最短子序列
和大于S的最短子序列给定长度为n的整数数列:a0,a1,..,an-1,以及整数S。这个数列会有连续的子序列的整数总和大于S的,求这些数列中,最小的长度。int findShortest2(vector& num,int s){ int n=num.size(); queue Q; int ans=n+1,qSum=0; for(int i=0;i<n;i++) {原创 2013-10-20 16:48:11 · 2814 阅读 · 0 评论 -
[各种面试题] 棋盘寻宝扩展
题目描述:现在有一个8*8的棋盘,上面放着64个不同价值的礼物,每个小的棋盘上面放置一个礼物(礼物的价值大于0小于100),一个人初始位置在棋盘的左上角,每次他只能向下或向右移动一步,并拿走对应棋盘上的礼物,结束位置在棋盘的右下角。从棋盘的左上角移动到右下角的时候的,每次他只能向下或向右移动一步,并拿走对应棋盘上的礼物,但是拿到的所有的礼物的价值之和不大于一个限定值limit,请设计一个算原创 2013-10-08 20:20:16 · 1456 阅读 · 0 评论 -
[各种面试题] 树的最小高度
题目描述:给定一棵无向树, 我们选择不同的节点作为根节点时,可以得到不同的高度(即树根节点到叶子节点距离的最大值), 现在求这棵树可能的最低高度。输入:输入可能包含多个测试案例。对于每个测试案例,输入的第一行为一个整数n(1 接下n-1行,每行包括两个整数u,v( 0输出:对应每个测试案例,输出这棵树可能的最小高度。原创 2013-10-07 23:10:38 · 1804 阅读 · 0 评论 -
[各种面试题] 黑白迷阵
题目描述:黑白迷阵是一个GrassLand编写的手机游戏,它的规则非常简单,有如下4*5的棋盘,其中一些是格子是黑色,一些格子是白色的,每当点击其中某一个格子,它以及它上下左右五个格子的颜色会发出反转,如下图 游戏胜利的条件很简单,把所有的格子变为黑色即可。GrassLand想知道,给定一原创 2013-10-07 17:38:20 · 1178 阅读 · 0 评论 -
[各种面试题] 矩阵覆盖求面积或者周长或者并的面积
首先求覆盖面积有两种方法:一是先离散化,然后分成 n*m个小格子,然后读入所有矩形,把矩形包含的所有小格子染色,最后统计被染色的格子的面积求和。二是用线段树+扫描线,很巧的方法,但是别人的代码我没有看懂。http://blog.csdn.net/dooder_daodao/article/details/6334169贴一个离散化的代码过来:#include#incl转载 2013-10-08 12:25:30 · 1883 阅读 · 0 评论 -
[各种面试题] 两条路径的最大收获
题目不太记得清了,大意是有个MXN的棋盘,然后每个格子上有一个价值,需要从左上角走到右下角再走回来,但每个格子只能走一次,请问来回的最大收获是多少。找了个NOIP的原题:题目链接: http://soj.me/1767考查从 (1,1)到(m,n)找两条不相交的路径使得它们的权值和最大。 法1:动态规划 设 f [ k ][ i ][ j ] 表原创 2013-10-08 09:41:29 · 1583 阅读 · 0 评论 -
[各种面试题] 买卖股票最多K次
题目描述:给定一个大小为n的数组,数组的元素a[i]代表第i天的股票价格。设计一个算法,计算在最多允许买卖k次(一买一卖记为一次)的条件下的最大收益。需要注意的是,你不能同时拥有两份股票。也就是说在下次买入前,你必须把手头上原有的股票先卖掉。输入:输入可能包含多个测试案例。对于每个测试案例,输入的第一行为两个整数n和k(1输入的第二行包括n个整数原创 2013-10-07 22:22:44 · 3886 阅读 · 0 评论 -
[各种面试题] 谷歌上机笔试--分数
题目描述:有一棵无限完全二叉树,他的根节点是1/1,且任意一个节点p/q的左儿子节点和右儿子节点分别是,p/(p+q)和(p+q)/q。如下图:它的层次遍历结果如下:1/1, 1/2, 2/1, 1/3, 3/2, 2/3, 3/1,...有如下两类问题:1.找到层次遍历的第n个数字。如,n为2时,该数字为1/2;2.给定一个数字p/q,输出它在层次遍历中的顺序,如原创 2013-10-07 16:48:26 · 808 阅读 · 0 评论 -
[各种面试题] 重叠的最长子串
重叠的最长子串:题目描述:给定两个字符串,求它们前后重叠的最长子串的长度,比如"abcde"和“cdefg”是"cde",长度为3。输入:输入可能包含多个测试案例。对于每个测试案例只有一行, 包含两个字符串。字符串长度不超过1000000,仅包含字符'a'-'z'。输出:对应每个测试案例,输出它们前后重叠的最长子串的长原创 2013-10-07 14:27:01 · 1296 阅读 · 0 评论 -
[各种面试题] 二叉树旋转查询
题目描述http://ac.jobdu.com/problem.php?pid=1541直接模拟就好了,但是我的代码后面的样例要超时。。。不知道为什么,把cin , cout 改成 scanf 之后居然就变成 output limit exceed 了,奇怪。算了,思路对的就行,懒得去搞了。#include#include#include#include#inc原创 2013-10-07 21:38:36 · 739 阅读 · 0 评论 -
[各种面试题] 最大子矩阵和
有一个n*m的二维整型数组矩阵matrix,计算它的最大子矩阵和(允许子矩阵为空)。样例:它的最大子矩阵和为29,对应的子矩阵为图中蓝色线条圈出的矩阵。提示:时间复杂度O(n^3),可以先尝试完成最大连续子段和问题。流传很广的题了。void initAccSum(vector >& mat,vector >& accSum);int maxSeqS原创 2013-09-21 22:30:16 · 876 阅读 · 0 评论 -
[各种面试题] 两个数组和的第K大
这是谷歌的一道面试题,有两个数组A和B,假设有一个数组C,C[i] = A[j] + B[ k ] , 即C中的元素是A和B中两个元素的和。让你求C中第K大的数字。之前有一篇转载的用堆来求的方法,因为每出堆一次最多添加两个元素进来,所以堆的最大容量是 2* k, 所以入堆出堆复杂度是 logK, 最后的复杂度是KlogK。注意添加的时候要判断是否已经进过堆。#include#原创 2013-10-07 14:04:20 · 3351 阅读 · 4 评论 -
[各种面试题] 复制有向图
复制一个有向图。输入是有向图中的一个结点指针,返回复制的图中对应的结点指针。有向图中结点的定义为:C++struct GraphNode { int data; vector neighbors; GraphNode(int data) : data(data) {}};跟复制带随即指针的链表其实是一样的。思路就是先复制新节点,然后复制连接关系,最后再把新复制原创 2013-09-21 19:25:50 · 1377 阅读 · 0 评论 -
[各种面试题] 单词游戏
一个n*m的字母网格grid,格子中的字母属于26个大写字母。选择某个格子作为起始点,每一步可以移动到上下左右相邻的格子中,这样遍历经过的字母组成了单词(每个格子只能访问一次)。判断是否能够在网格中找到给定的单词pattern。样例:n=3,m=4Grid:PACDBGHIMNDC对于pattern = "DCHGB",返回true。对于pattern = "PB原创 2013-09-21 20:38:41 · 1131 阅读 · 0 评论 -
[各种面试题] 直角路线遍历棋盘
有一个n*m(n和m都不超过50)的棋盘,有k个目标格子需要访问。需要访问的格子的横纵坐标存放在数组x[]和y[]中(0<=x[i]<n, 0遍历的规则为:每一步只能从一个目标格子水平或者竖直跳跃移动到另一个目标格子。连续的两步必须形成直角。即如果前一步是水平移动,那么下一步只能竖直移动。问是否存在一种遍历顺序,使得每个目标格子有且仅被访问一次。样例:k=8原创 2013-09-21 17:38:27 · 1758 阅读 · 0 评论 -
[各种面试题] N皇后问题非递归版
N皇后问题的非递归版本:#include#include#includeusing namespace std;const int N=4;vector rowPut(N+1,0);void print(){ vector > grid(N,vector(N,'.')); for(int i=1;i<=N;i++) grid[i-1][ rowPut[i] -1]原创 2013-09-23 20:26:31 · 769 阅读 · 0 评论 -
[各种面试题] N个点来回路径最小
N个点来回路径最小:2013年Hulu面试中出现过。二维平面上有n个点,已按照x坐标从左到右排序(所有点的x坐标均不同),存放在数组points中。需要从最左边的点出发,先向右扫描访问一些点,到达最右边的点,然后再向左扫描,访问第一次没有访问的点,最后回到最左边的点。扫描过程中经过的总的欧式距离要最小。返回这个最小的欧式距离。样例:points原创 2013-10-09 20:13:47 · 3046 阅读 · 0 评论 -
[各种面试题] 碰撞检测
来先个矩阵相交的:矩阵相交的条件是 ( P1,P2), (P3,P4 ),两个矩形,满足 pp= (max(p1.x,p3.x),max(p1.y,p3.y)), pq=( min(p2.x,p4.x), min (p2.y,p4.y) )那么相交的条件是 pp.x然后是线段相交的:http://blog.csdn.net/greyant/article/转载 2013-10-08 10:31:30 · 970 阅读 · 0 评论 -
[各种面试题] 树的序列化和反序列化
树的序列化和反序列化这里使用的是Leetcode上的层序遍历的序列化的方法。string serialize(TreeNode* root){ string seq; queue Q; Q.push(root); while(!Q.empty()) { TreeNode* cur=Q.front(); Q.pop(); if(cur==NULL) seq.原创 2013-10-20 22:31:53 · 2611 阅读 · 0 评论 -
[各种面试题] 堆的实现
比较常规的题,试着写了下。int heap[100];int n;void adjust_down(int rt){ if(rtn) return; if ( rt*2>n ) return; else { int val=heap[rt<<1]; int child=rt<<1; if(rt*2+1<=n&&heap[rt*2+1]<val) {原创 2013-10-20 21:52:31 · 1381 阅读 · 0 评论 -
[各种面试题] 删除字符中的b和ac
删除字符中的b和ac删除字符分析原题删除字符串中的“b”和“ac”,需要满足如下的条件:1. 字符串只能遍历一次2. 不能够使用额外的空间例如:1. acbac ==> ""2. aaac ==> aa3. ababac ==> aa4. bbbbd ==> d进一步思考:如何处理aaccac呢,需要做哪些改变呢?in原创 2013-10-20 18:49:59 · 3298 阅读 · 0 评论 -
[各种面试题] 子序列的个数、排列木桩
来自:http://blog.csdn.net/thebestdavid/article/details/11908961注意这里是求子序列的个数。子序列的个数题目详情: 子序列的定义:对于一个序列a=a[1],a[2],......a[n],则非空序列a'=a[p1],a[p2]......a[pm]为a的一个子序列,其中1例如:4,14,2,3和转载 2013-10-14 22:10:05 · 1027 阅读 · 0 评论 -
[各种面试题] 请用Read4实现Read
请用Read4实现ReadF家的面试题,题意不太容易懂,大概就是有个read4每次读4字节,然后要实现一个int read(int size,char* buffer) 这样的函数。int read(int size,char* buffer){ assert(size>0&&buffer); static char extra[4]; static int extra_c原创 2013-10-19 16:54:05 · 3259 阅读 · 0 评论 -
[各种面试题] 等长链表单扫描求和
等长链表单扫描求和两个单链表(singly linked list),每一个节点里面一个0-9的数字, 输入就相当于两个大数了。然后返回这两个数的和(一个新list)。这两个输入的list 长度相等。 要求是:不用递归。要求算法在最好的情况下,只遍历两个list一次, 最差的情况下两遍。下面这个方法也只是看上去很美,其实也不是遍历了一遍,一前一后两个指针不也遍历了两遍吗。所原创 2013-10-19 21:20:08 · 1126 阅读 · 0 评论 -
[各种面试题] 小朋友拿糖果
小朋友拿数据http://www.itmian4.com/forum.php?mod=viewthread&tid=1133有两个小朋友,玩一个游戏,游戏的内容是:有一个数组,只有头和尾可以取数据,一次只能取得一个,谁拿到的数据和最大谁就赢了。现在假设两个小孩都足够聪明。你能否求出第一个小孩,取得的和是多少分析:首先让我想到的是动态规划,然后试图给出公式。不管哪个小孩,我们用dp[j]转载 2013-10-17 20:34:55 · 1434 阅读 · 0 评论 -
[各种面试题] 第K大的拥有个数不超过1的字符串
微策略的一道笔试题:0和1的字符串,要求找出所有1个数不超过k个的n长度的字符串中第I大的 有没有什么比从小到大遍历,然后数1个数是否符合条件更好的办法? 举几个例子就会发现,其实就是求I的二进制表示:比如 I=1 : 1I=2: 10I=7: 111所以下面就不讲了。原创 2013-10-15 14:42:16 · 1125 阅读 · 0 评论 -
[各种面试题] 找出三个只出现一次的数
题目:一个数组中有三个数字a、b、c只出现一次,其他数字都出现了两次。请找出三个只出现一次的数字。http://zhedahht.blog.163.com/blog/static/25411174201283084246412/分析:在博客http://zhedahht.blog.163.com/blog/static/2541117420071128950682/中我们讨论了转载 2013-10-15 13:12:18 · 983 阅读 · 0 评论 -
[各种面试题] 匹配的字符串模式的个数
今天AMAZON的一道题,其实数据很弱,直接暴力都能过的。然后第一反应是用字典树,就是如果匹配到*号的时候,就把一层都往下搜索一遍。然后第二反应是用KMP,这样复杂度是O(n * (n+m ) )的。直接字符串读取一行还没弄出来。囧。#include#include#include#includeusing namespace std;bool isMatc原创 2013-10-15 14:26:15 · 1190 阅读 · 0 评论 -
[各种面试题] 整数划分问题
http://www.cnblogs.com/xiaoxian1369/archive/2011/09/12/2174212.html:整数划分 --- 一个老生长谈的问题: 1) 练练组合数学能力. 2) 练练递归思想 3) 练练DP 总之是一道经典的不能再经典的题目: 这道好题求: 1. 将n划分成若干正整数之和的划分数。 2. 将转载 2013-10-13 21:21:11 · 4224 阅读 · 0 评论 -
[各种面试题] 最长重复子串-后缀数组
正好练习写一下后缀数组。#include#include#include#includeusing namespace std;struct node{ char* s; int start; node(char* ss,int t):s(ss),start(t){} bool operator<(const node& oth)const { ret原创 2013-10-11 18:07:17 · 840 阅读 · 0 评论 -
[各种面试题] 交叉大小的序列
这是G家的面试题:首先给你一个字符序列,比如 2,1 5,4 6 然后让你生成这么一个序列 ,其中 s1 s3 s5 这个还比较好说咯,把原来的序列排序,然后把后一半的数字插入到前一半的中间,就能得到了。你以为就完了吗,当然没有。接着会问你,怎么把全部的这种序列排出来。巧妙的生成我还想不到,我就用了个比较直观暴力的回溯来做了,每次选取一个没用过的数字到当前位置就好原创 2013-10-11 15:32:51 · 826 阅读 · 0 评论 -
[各种面试题] 区间相交
有一个包含n个整数的数组arr,请计算出数组中所有元素之和。(假设中间结果以及最终结果都不会超出32位有符号整型的范围)。第一个反应是线段树,先留一下,写个排序遍历的:/*struct Interval { int start; //区间左端点 int end; //区间右端点};*/struct IntervalWithPos{ Inte原创 2013-09-17 21:24:52 · 1146 阅读 · 0 评论 -
[各种面试题] 两数乘积全为1的最小位数
给定一个非负整数a(不超过106),是否存在整数b,使得a和b的乘积全为1。如果存在,返回最小的乘积的位数。如果不存在,返回-1。样例:a=3,存在b=37,使得3*37=111,则函数应返回3(111的位数)。又是谷歌的一道题,真是难啊。。。这题是利用余数定理: 如果 x 是这个全为1的数, 那么应当有 x % a ==0 ,即有个b能满足 a * b ==x (全1原创 2013-09-20 13:54:33 · 1404 阅读 · 0 评论 -
[各种面试题] 检查数独是否正确
写程序判断一个9*9的数字盘面是否为合法的数独(查看定义)。9*9的盘面按照Row-major order表示为一个81维的一维数组。提示:请直接在一维数组上操作,不要先将一维数组拷贝到9*9的二维数组。犯了两个错,一个是 应该是 row[x] | = ,结果写成&=; 二是要判断 n是否在[1,9]间。int isValidSudoku(int原创 2013-09-20 12:54:10 · 6602 阅读 · 0 评论 -
[各种面试题】任务调度-拓排序
有n个任务需要完成(编号1到n),任务之间有一些依赖关系,如果任务a依赖于任务b和c,那么只有当任务b和任务c完成之后才能完成任务a。给定所有的依赖关系,判断这些任务是否能够完成。如果能够完成,请给出一个合法的任务完成序列。样例:n=51->2,33->4上述样例中任务1依赖于任务2和任务3,任务3依赖于任务4,那么存在合法的任务完成序列4,3,2,1,5原创 2013-09-17 20:14:33 · 1918 阅读 · 0 评论 -
[各种面试题] 判断是否平衡二叉树
判断一棵二叉树是否是平衡二叉树,递归在统计深度的时候就可以返回结果了。/*树结点的定义(请不要在代码中定义该结构)struct TreeNode { TreeNode *left; TreeNode *right;}*/bool _isBalanced(TreeNode* root,int& depth);bool isBalancedTree(TreeNode *roo原创 2013-09-18 11:06:29 · 582 阅读 · 0 评论 -
[各种面试题] 非二叉树的最大路径和
给定一棵树的根结点,树中每个结点都包含一个整数值val。我们知道树中任意2个结点之间都存在唯一的一条路径,路径值为路径上所有结点值之和。请计算最大的路径值(允许路径为空)。样例: -10 / | \ 2 3 4 / \ 5 -1 / 6 / -1最大的路径值原创 2013-09-17 21:01:41 · 1912 阅读 · 0 评论 -
[各种面试题] 字符串匹配查询
传闻是FB 2012的题,真不是盖的啊。有一个长度为n的字符串str,有非常多的关键字query(长度不超过10),需要判断每个关键字是否是str的子串。注意:query是动态的输入进行查询的,预先并不知道所有的query。请实现2个函数initWithString(str)和existSubString(query)。我们会首先调用一次 initWithString(原创 2013-09-18 10:08:23 · 1312 阅读 · 0 评论 -
[各种面试题] 链表快排
前面写了个链表的归并排序,这里再写个链表的快排。链表的快排处理其实跟数组的没什么区别,只是在partition要三位取中的话稍微烦一点;#include#include#includeusing namespace std;struct ListNode{ int val; ListNode* next;};typedef ListNode LN;LN* getL原创 2013-09-17 10:01:24 · 852 阅读 · 0 评论 -
[各种面试题] 链表归并排序
有一个链表,然后请对它进行排序;这里先写了一个归并排序;#include#include#include#includeusing namespace std;struct ListNode{ int val; ListNode* next;};int getLength(ListNode* head);void mergeSort(ListNode*& hea原创 2013-09-16 21:48:46 · 701 阅读 · 0 评论