笔试题
文章平均质量分 73
_从未止步
just do IT
展开
-
LeetCode 33
这个题是将一个排序数组部分扭转一下,导致数组成为部分有序的两部分,现在给定一个target,最后找出该target的下标,若不存在则返回-1,题目意思还是很好理解的,但是求解的时候确实比较麻烦的。为什么麻烦呢?因为遍历一遍数组的方法并不适用,而且这样的做法也没有意义! 所以我们得另外开辟路径,我们平时在查找有序数组的时候用的最多的方法是二分查找法,那么这个题能否使用二分查找呢?答案是可原创 2016-05-04 15:14:51 · 2236 阅读 · 0 评论 -
LeetCode 20
看到这个题的时候我们是否会记起点什么呢?是不是很熟悉的感觉呢,没错就是括号匹配问题。我们知道后会立马想起一个数据结构---栈。(1).我们需要借助一个栈来保存括号的左边部分找到右边的部分时,找出栈顶元素,若两者匹配,则删除栈顶元素,继续下一轮遍历。(2).如果当前元素是括号的右边部分,但是却不合栈顶元素匹配,则说明整个匹配失败。(3).需要注意的是,栈空的情况。最后是通过栈是否为空来判原创 2016-04-22 08:53:06 · 1231 阅读 · 0 评论 -
LeetCode 19
终于碰见了和数据结构相关的题目了,这也意味着复杂度在增加。来看看这道题吧,删除链表的倒数第k个节点,我们有必要先找出链表的长度然后再确定倒数第k个节点吗?我觉得这是没必要的。因为我们的方法比这样更巧,听起来高大尚一些。解题思路以及注意事项如下:1.我采用的是两个指针,一快一慢,快的先走k+1步,然后快指针和慢指针一起走,直到快指针走到尾2.为什么要快指针要走k+1步呢?我们仔细想想一下,我原创 2016-04-22 08:18:41 · 1526 阅读 · 0 评论 -
LeetCode 18
如果说求两个数相加是轻松,那么求三个数相加则是痛苦,如果说求四个数相加呢-----绝望。没错,拿到这个题的时候确实有些绝望,但是既然开发这个题的人如此刁难我们,我们也不能放弃,不要辜负别人的一番好意,所以我咬牙继续。经历过前面的风雨,我们也学会了成长,这道题是建立在前面的题的基础上而开始的。题目的要求比较严格,要求四个数的和和target的值相等,且四个数字不重复且升序。所以我们得一个原创 2016-04-21 23:25:51 · 1622 阅读 · 0 评论 -
LeetCode 17
这个题目有意思,和生活接近,题目的意思一看就知道,应该是字符串的全排列吧。但是需要注意的是有几数字字符是没有对应的字符串的,比如‘0’和‘1’,所以我们的输入字符串中若有他们,则将它们过滤掉。这个题我的思路是递归,因为这种类型的题目递归思路清晰明了,若要使用循环,则会形成n层循环,所以循环的思想应该被淘汰掉。我在做这个题的时候喜欢先把“多余”的东西先给它解决掉,比如‘0’和‘1’这两个数字,我先遍原创 2016-04-19 17:24:27 · 1377 阅读 · 2 评论 -
LeetCode 16
上个题绞尽脑汁的思考测试终于弄出结果了,所以遇到这个题的时候感觉松了口气。这个题要求三个数的和最接近所给的数,意思就是找一个数组中三个数的和,使它最接近你所给的目标。我的思路是遍历,因为不遍历完所有情况根本就无法推测结果,难道大家还有别的做法能减少计算的次数吗,我猜想如果排序后还是有可能的排序后能推测出数字的和范围,这个办法应该可行的,但是仔细想想的话还是比较麻烦,需要考虑到的细节又会原创 2016-04-18 20:02:03 · 2544 阅读 · 0 评论 -
LeetCode 15
这个题确实比较复杂,我刚刚开始的思路是先将数组排序,然后从左向右遍历,然后用两个变量lpos,rpos分别指向left+1 和 nums.size()-1,然后求三者的和,若和sum 0则让rpos减1。想法不错,可是现实很残酷。这样的解很容易错过真实解,我测试了很多遍,总有测试用例无法通过。其中还有一个时间复杂度太高了也没通过测试。这个题大家可以自己去实现试试,真的错误点太多了,最后原创 2016-04-17 21:31:31 · 2932 阅读 · 0 评论 -
LeetCode 14
我觉得人要知足啊,不要做每到题的时候都想着有没有最优化的办法,这样没什么不好,但是这样也让你很伤脑经,我个人觉得还是要由浅入深,先想出简单办法,再去想优化的办法。这个题的解法真的不难,但是这个题目的意思却是能让人思考好一会儿,我想了半天,是不是用strncmp一个一个的比较啊,有没有更好的办法呀,最后发现参数时string类,所以顿时有了思路。思路就是对比呗,但是我们得做点优化:(原创 2016-04-16 15:11:26 · 3350 阅读 · 0 评论 -
LeetCode 13
哈哈,有了上个题的经验,我们是不是应该趁热打铁呢?这次是讲一个罗曼的(罗马)数字转化为一个整形数字,所以我们逆向去推理上个题,其实这个题很有规律的,将string数组遍历一遍就可以求解了,废话不多说,见代码:class Solution {public: int romanToInt(string s) { //和上道题刚好相反 int lastnum原创 2016-04-15 21:27:34 · 4747 阅读 · 2 评论 -
LeetCode 12
这道题的意思是将整形数字转化为罗马数字,只要了解了罗马数字的构成特点就知道怎么将整形数字转化为罗马数字,转化规则如下:个位数: Ⅰ【1】 Ⅱ【2】 Ⅲ【3】 Ⅳ【4 】 Ⅴ【5 】 Ⅵ【6】 Ⅶ【7】 Ⅷ【8】 Ⅸ【9】 ·十位数举例 Ⅹ【10】 Ⅺ【11】Ⅻ【12】 XIII【13】XIV【14】 XV【15】XVI【16】X原创 2016-04-15 20:53:21 · 676 阅读 · 0 评论 -
LeetCode 11
这道题其实不难,但是需要注意题目的要求,理解题目意思很重要! 首先我来说说题目意思吧,这道题是给你n个数,存在vector中,每个数和其下标组成一个坐标(i,ai),要求其中两个点以及他们与x轴的垂线以及x轴三线组成的图形的能装下多少水。注意,这不是求面积!,我画个图分析一下吧我们要求的是矩形的面积,而不是梯形的面积,这和生活有一定联系吧,倾斜的水会洒出来的,所以我们需要求什么已经原创 2016-04-14 17:04:30 · 2731 阅读 · 0 评论 -
LeetCode 21
已经已连续做了好几道题了,感觉停不下来了,突然来了兴趣了,这个题让我觉得思路很清晰,合并两个排序的链表。我的思路如下:分别从两个链表里面摘取节点放到新的链表中,最后摘到一个也不留就行了。不过需要注意的是一些小细节,主要的注意事项如下:1.两空(两个空的链表)2.一空(一个链表为空一个部位空)3.一个摘完了,另外的可能还有节点(这个需要好好注意一下,很容易出错的)好了,见代码吧:原创 2016-04-22 09:14:29 · 1261 阅读 · 0 评论 -
LeetCode 22
这个题也是括号的匹配,但是不是让你判断是否匹配,而是让找出所有匹配的情况,与以前的题目并不一样,难度也不是一个等级的。看到题目的测试用例,我的第一反应是循环,因为我对循环比较敏感吧,所以我用循环写了一下,但是我发现,n=2的时候很简单就写出了代码,但是n=3的时候就有点麻烦了,当n=4的时候--------我感觉大脑要炸了... 这说明了这个思路不行,必须换种思路去解题,所以我给自己一原创 2016-04-22 15:02:19 · 915 阅读 · 0 评论 -
LeetCode 32
这个题目比较难想到,我刚刚开始以为使用栈就可以解决问题,因为数据结构的栈可以用来判断符号的匹配,相信我们也都写过相关的代码吧。但是这个题并不是简单的匹配而已,它要求的是最长的匹配符号的长度,而且字符串中只有 '(' 和 ')'两种,所以我们也比较容易判断是否匹配,不过要达到题目的要求还有一定的难度。 既然以前使用栈的时候可以判断符号的匹配问题,那么这个题的思路也跟栈离不开,但是需要对原创 2016-05-03 20:56:51 · 3903 阅读 · 0 评论 -
LeetCode 31
这个题目的意思结合所给示例以及题目描述,可以知道。给一个数组,求该数组所组成的数字的全排列的下一个数字,这句话不懂没关系,我举个例子你就懂了 例如: 1.若给的是 1 2 3 ,那么你要将数组内容变为 1 3 2; 2.若给的是 3 2 1 ,那么i要见数组的内容变为1 2 3;其实这是一个循环的排列,就是你给任意的数字排列,都可以找到下一个排列,大概就是这样的情原创 2016-05-02 14:53:49 · 4011 阅读 · 0 评论 -
LeetCode 30
刷到这里的时候我感觉到了痛苦,我觉得这些题的难度在增加,就拿这个题来说吧,我折腾了一两天,最后还是借鉴了一下网友的思路才做出来的,困扰我的有以下几点。1.这英文单词虽懂,可是题目却还是没有理解,问了很多人他们也不知道,其中还问了一个过了专八的人,她的回答是专业性太强,不理解,很多网友说的也不清楚,很容易误导人的2.所学的知识有些不够,或者说有些东西用的不熟练,比如这道题的map,因为使用不原创 2016-05-01 20:11:02 · 4715 阅读 · 0 评论 -
LeetCode 29
题目意思清晰明了:求两个数的商,不能使用乘法,除法或者求模运算等等。看似很简单的一道题,可是在排行榜上的正确率却是最低的一道,原因是情况很复杂,边界很难控制。需要考虑到的细节特别多,如:正负号,除数和被除数的取值,还有就是越界情况。其中越界情况最难考虑到,我也给拉低这道题的正确率增加了一份”功劳“,真的测试了好几遍才将条件考虑全面,我的代码中写有很多注释(大部分以测试用例形式给出)可以帮助大家分析原创 2016-04-28 19:45:25 · 3747 阅读 · 0 评论 -
LeetCode 28
这道题是字符串匹配题,返回匹配的位置。相信很多人都见过,我们很容易用暴力求解的方法解答出来,但是我想要借此说明的是一个算法----MKP算法,当然我在这里并不会详细介绍MKP算法,因为这个算法已经被很多人讲解过了,没有必要再讲一遍。我在这里想要做的是教大家如何构造出next数组,以及讲解匹配的规则。 大家请看上面的图,假如我们的模式串为“abcdabcddd”,那么我们可以知道前原创 2016-04-27 16:59:29 · 969 阅读 · 0 评论 -
LeetCode 27
这个题目给的数组是无序的数组,要求删除特定的元素,然后返回剩余数组的长度。还是比较简单的一个题目,相当于是放松一下我们的心情,增加点自信心,不至于一直做难题而自卑。好了,题目的主要思路是:依次找到不是val的值,然后将它加入到前面的序列中,不过需要注意一点: *这个题目还是需要覆盖一些值,第一次出现 val 值之前的所有位置是不能覆盖的,所以在未出现 val 值之前,pos还是需要和n原创 2016-04-26 17:54:25 · 4416 阅读 · 0 评论 -
LeetCode 26
这个题目的意思是给你一个数组,删除里面重复的数字,然后返回数组的长度。第一反应是它很简单,不过还是调试了几次才写出来的,确实是一个循环就能解决的问题,不过我觉得其中还是需要注意一下东西:1.先找到第一次出现相同的位置,这样方便解题(我是按照我下面的代码来说明的,当然你可能会有别的方法)2.遇到相同元素时,记录第一次出现的位置prev,然后找到不是这个元素时停止,将这个元素加入到不重复序列中原创 2016-04-26 17:31:10 · 683 阅读 · 0 评论 -
LeetCode 25
怪不得很多人都说LeetCode上的题好,我知道原因了,LeetCode上的题扩展性真的很高,相同的情况的不同变形,这真的会让你掌握了这类型的题的做法,我想每种类型的题做了好几个的时候,人的印象就会深刻很多,思维的严密性也会增强很多。这道题的意思我想大家通过题目给的例子应该很快就能理解吧。我就拿这道题和上一道题来对比一下,上道题中每次交换的只有两个节点,而这道题的节点数是k个。两者具体的差别如下:原创 2016-04-25 16:35:08 · 1314 阅读 · 0 评论 -
LeetCode 24
这个题的意思是将一个链表,按照每两个节点逆序。我想了一下,主要是对链表的操作以及对指针的交换,掌握了方法以后确实不是很难,但是需要注意的是不要将指针给弄错了,否则容易导致链表信息丢失。 我的方法中使用到了四个主要指针,我画了个图来解释它们:这四个指针的作用通过上图,大家应该能够理解了,因为我们需要做的事有三件:(1)交换中间部分 (通过prev和cur) (2)连接原创 2016-04-24 15:37:12 · 3346 阅读 · 0 评论 -
LeetCode 23
合并K个排序链表,没错。我的思路是分别从 K 个链表的中找出最小的一个值,然后依次插入链表,最后遍历完所有链表就好了,也没想中的那么难呀,循环遍历的思路如下: (先说明一下,它是不合格的)主要思路是:1.首先从所有排序链表里找一个最小val节点作为头结点2.依次循环在各个链表里面找到最小节点摘下来尾插,循环结束的条件是当链表的数目为0或者为1的时候结束(可以通过lists[i]==NU原创 2016-04-23 14:16:55 · 2063 阅读 · 0 评论 -
LeetCode 10
实现"正则表达式"原创 2016-04-12 15:37:01 · 796 阅读 · 0 评论 -
LeetCode 9
class Solution {public: bool isPalindrome(int x) { if( x < 0 ) {//负数不是回文数 return false; } int tmp = x; int原创 2016-04-12 13:53:38 · 816 阅读 · 0 评论 -
360在线编程题
昨天参加360的笔试了,其中第一道编程题是这样的: 输入一个字符串,然后将一个位置的一个字符换成你给的字符,统计函数f(s)的个数。 比如有字符串 .b..bz.... f(s)是指将将连续两个.换成一个. 最后字符串中没有连续.所需最少的替换次数。 例如: .b..bz.... 输入 输出1 h ---> 4原创 2016-03-30 14:14:24 · 527 阅读 · 0 评论 -
算法题——n个骰子的问题
要求:n个骰子抛出后的正面朝上的点数的和在所有情况中出现的概率分析:刚刚拿到这个题的时候觉得自己一眼能看出有哪些情况,可是当骰子增加的时候却发现很难着手,怎么解决确实很棘手。仔细分析的话很容易找到一种便于理解的方法,后面的骰子的点数依靠前面的骰子的点数,可以看出后面出现的骰子和为n的情况,是由前面骰子和为(n-1),(n-2),(n-3),(n-4),(n-5),(n-6)这些情况构成的。可以原创 2016-03-11 21:57:59 · 1738 阅读 · 0 评论 -
算法题——查找不同的三位数
问题:有1,2,3,4四个数字,能组成多少个互不重复且互不相同的三位数,分别列出它们#includeint main(){ int i = 1; int j = 1; int k = 1; for (i = 1; i <= 4;++i) { for (j = 1; j <= 4;++j) { if (j == i) continue; for (k原创 2015-11-24 18:53:19 · 1041 阅读 · 0 评论 -
算法题——栈和队列的互换
问题描述:(1). 用两个栈实现一个队列 (2).用两个队列实现一个栈#include #include #include using namespace std;//用两个栈实现一个队列templateclass MyQueue{public: MyQueue(); ~MyQueue(); void PushQTail(const T& node); T Del原创 2015-11-18 20:10:00 · 615 阅读 · 0 评论 -
算法题——将student a am i转化为i am a student
问题描述: 将student a am i转化为i am a student (空间复杂度为1)#include int main(){ char str[] = "student a am i"; char ch; int i = 0, j = 0, k = 0, len = 0; while (str[i] != '\0') { k = i; j = i;原创 2015-11-15 23:31:37 · 805 阅读 · 0 评论 -
算法题——翻转一个数
问题描述,翻转一个数的二进制位,例如将25翻转到255013683225:0000 0000 0001 1001 -----> 1001 1000 0000 0000 (2550136832)#includeunsigned int reverse_bit(unsigned int value){ unsigned int val = 0; int i = 0; for原创 2015-11-13 23:40:43 · 499 阅读 · 0 评论 -
算法题——喝汽水问题
问题描述:一块钱可以买一瓶汽水,两个空瓶能换一瓶汽水,现在有20块钱,问能喝多少瓶汽水。#includeint Maxdrink(int n){ int total = n; int empty = n; //int tmp = 0; while (empty > 1) { if (empty % 2 != 0) //奇数 { //tmp = 1; //多余了一原创 2015-11-12 18:52:31 · 1609 阅读 · 0 评论 -
算法题——求一个数的二进制中1的个数
例如 : 整数25 11001 > 1 的个数为 3#include int GetBinaryNum(int value){ int count = 0; while (value) { value &= (value - 1); count++; } return count;}int main(){ printf("%d\n",G原创 2015-11-07 21:07:02 · 502 阅读 · 0 评论 -
算法题——不创建临时变量求一个字符串的长度
#include #include int Strlen(char* src){ assert(src); if (*src == '\0') return 0; return Strlen(src + 1) + 1;}int main(){ printf("%d\n",Strlen("hellowrold")); return 0;}原创 2015-11-07 21:01:20 · 760 阅读 · 0 评论 -
LeetCode 72
Edit Distance题目意思是将一个字符串变换为另一个字符串所需要的最少的操作次数。变换的方法包括: 1.替换一个字符 2.插入一个字符 3.删除一个字符 明白了题意之后,我们就可以动手去做了,这是一个动态规划的题。拿到这个题目的时候,我感觉有点无法动手,老是想着是否存在着某些特殊情况需要我们特殊处理。这种题目确实不怎么直观,所以一定要注意方法。原创 2016-12-26 18:03:00 · 572 阅读 · 0 评论 -
蘑菇街在线笔试题
今晚参加了蘑菇街的在线笔试题,我学的c++,没学java和python,选择题java和python挺多的基本不会。笔试题有两道,第一道对了90%,仔细想了想应该是输入数字的上限没有控制,逻辑应该没有问题了。说白了冒泡排序。只需要计算需要交换多少次数字让数字序列变为有序。例如:输入 输出2 -----》表示两串数字序列3 -----》第一个数字序列有3个数,分别如下:原创 2016-03-31 22:00:11 · 796 阅读 · 0 评论 -
笔试题——对称二叉树
判断一颗二叉树是否是对称二叉树对称二叉树意识就是以根节点为对称轴,对称轴两边的节点完全相同,例如:1 12 22 3 3 44 3 3 4 43可以看出左边的是对称二叉树,右边的不是对称二叉树(其中有一个节点值不同),代码:bool IssymmetryBintree(BinTreeNode *left, BinTreeNode *r原创 2016-04-02 22:43:42 · 427 阅读 · 0 评论 -
LeetCode 8
atoi的陷阱原创 2016-04-11 18:24:25 · 2765 阅读 · 0 评论 -
LeetCode 6
这个题是个智力题,重要的是找规律,我来描述一下问题吧:给一个字符串S 和行数n ,按照题中的格式构成n行的形状,形状大概如下: (3行)然后按照水平方向取出,最后返回 “PAHNAPLSIIGYIR”我觉得将输入的字符串直接返回好像和最后要得到的结果一样,不过这种做法万万不可。我们还是按照规律来找吧,规律如下:1.第一层和最后一层:可以看出第一层和最后一层比别的层数的元素少原创 2016-04-09 12:27:58 · 607 阅读 · 0 评论 -
LeetCode 5
找一个字符串的最长回文子串原创 2016-04-09 10:45:46 · 550 阅读 · 0 评论