
程序员笔试面试专题
文章平均质量分 59
此专栏收集各大IT公司的笔试与面试题。欢迎大家一起交流讨论,提供更赞的思路和算法。让我们共同学习,共同进步。
「已注销」
这个作者很懒,什么都没留下…
展开
-
[笔试题] 阿里巴巴2013技术类笔试题(完整版手工记录+详细解析)
一、单选题(每题2分,共20分)1. -7的二进制补码表示为:A. 01111000 B. 01111001 C. 11111000 D. 11111001解析:正数的原码反码补码均相同,负数反码为除符号位外反转各个二进制位,补码为反码+1.-7的原码:10000111-7的反码:11111000-7的补码:111110原创 2014-08-25 06:35:42 · 6756 阅读 · 11 评论 -
[2013百度软件研发笔试题] 求字符串中连续出现相同字符的最大值
题目完整描述为:用递归的方式实现一个求字符串中连续出现相同字符的最大值,如aaabbcc,连续出现a的最大值为3,abbc,连续出现字符最大的值为2。以下是我想出来的方法:#include using namespace std;#define MAX(a, b) (a) > (b) ? (a) : (b)int Get(char *s, int n, int m) /原创 2014-08-24 01:44:41 · 7121 阅读 · 9 评论 -
15个使用频率极高的基础算法题(附完整代码)
合并排序,将两个已经排序的数组合并成一个数组,其中一个数组能容下两个数组的所有元素一般来说,合并两个已经有序的数组,首先是开一个能存的下两个数组的第三个数组,但是题目中已经说了,其中一个数组能全部存的下,显然就不应该浪费空间了。从前往后扫的话,数据要存在大数组的前头,这样每次要把大数组的元素一次后移一位,显然不是什么好主意,所以我们从后往前存。#include#include原创 2014-08-23 07:33:42 · 5477 阅读 · 3 评论 -
[练习题] 将数组中的负数全部移到非负数的前面,要求O(n)时间复杂度
这道题和快排非常相似,设两个指针,一个在最前面,一个在最后面,两个指针不断x原创 2014-08-19 02:35:02 · 4721 阅读 · 0 评论 -
[微软面试题] 在排序数组中,找出给定数字的出现次数
#includeusing namespace std;int num[5] = {1, 2, 2, 2, 3};int search(int x){ int i = 0, j = 5; int mid = (i+j) >> 1; while(num[mid] ^ x) { if(num[mid] > x) j = mid; else i = mid;原创 2014-08-19 02:07:29 · 1085 阅读 · 1 评论 -
[练习题] 找出1-100中缺失的两个数
现在有1~100共一百个自然数,已随机放入一个有98个元素的数组a[98].要求写一个尽量简单的方案,找出没有被放入数组的那2个数,并在屏幕上打印这两个数。注意:程序不用实现自然数随机放入数组的过程。原创 2014-08-19 00:59:44 · 6105 阅读 · 0 评论 -
[网易2012年某笔试题] 求斐波那契数列, 要求时间复杂度尽可能小(简单题,不熟悉斐波那契的同学可参考)
实现斐波那契数列,要求时间复杂度尽可能小,但必须小于O(n方)原创 2014-08-19 00:28:12 · 1704 阅读 · 1 评论 -
[练习题] 一道变态的面试题(吐槽啊吐槽)
题目如下:这是一段错误的代码,其int n = 20; for(int i = 0; i < n; i--){ printf("-"); }原创 2014-08-14 09:23:37 · 1820 阅读 · 0 评论 -
经典智力题:火车运煤
你是一个煤老板,你在矿区开采了3000吨煤,需要运送到市场上去卖,从你的矿区到市场有1000公里,你手里有一列以煤为动力的火车,这个火车一次最多能运1000吨煤,火车每公里消耗一吨煤。问如何运送才能运最多的煤到集市?原创 2014-08-14 07:46:54 · 5483 阅读 · 3 评论 -
[笔试题] 两个有趣的问题
两个有趣的笔试题,看看你是不是都能轻松搞定~有n瓶粉末,一瓶有毒。有毒的粉末融在水里一小时后水会变蓝。你有一些试管,问最少需要多少时间和多少试管就能确定毒粉末呢?不考虑粉末导入试管的时间。给定一个无环的单链表,如何快速定位位于链表中间的那个节点?返回值为指向中间节点的指针。原创 2014-08-08 02:19:21 · 2730 阅读 · 5 评论 -
[算法浅析] 如何在O(1)的时间里删除单链表的结点
题目是这样的:给你一个单链表的表头,再给你其中某个结点的指针,要你删除这个结点,条件是你的程序必须在O(1)的时间内完成删除。由于有的同学对链表还不是很熟悉,本文尽量描述的通俗易懂,老鸟请直接跳过前面一大段。链表结构如下:struct node{ int val; node* next;};题目不是很难,很快就能想到好办法:)首先回顾一下普通的删除方法,原创 2014-08-02 04:20:48 · 2881 阅读 · 9 评论 -
[笔试题] 不使用库函数sqrt实现求一个数的平方根
看到这题第一想法就是二分,同时很快就原创 2014-07-30 12:14:49 · 2833 阅读 · 0 评论 -
[算法浅析] 计算循环节
整体的思路来自于这篇文章:http://hi.baidu.com/chu2rikka/item/59ff471961814ae45f53b1cf#include#include#includeusing namespace std;int gcd(int x, int y){ return y == 0 ? x : gcd(y, x % y);}int main(){ int x, y原创 2014-04-14 14:41:01 · 3109 阅读 · 0 评论 -
[C++] 32位C++程序,计算sizeof的值
sizeof(str) = 6; //字符串数组,大小是六个字节(加上'\0'共六个)。sizeof(p) = 4; // 指针的内容就是一个指向目标地址的整数,所以不管指向char、int还是其他,32位机指针一律是4个字节。sizeof(n) = 4; // int型变量是4个字节。右侧:sizeof(str) = 4; // 这里的str不再是100100字节。当数组作为函数的参数进行传递时原创 2014-04-14 14:40:47 · 3032 阅读 · 0 评论 -
[杂谈] 回顾switch
今天群里有人问了这么一个问题:#includeint main(){ int v1=0,v2=0; char ch; while((ch=getchar())!='#') { switch(ch) { case 'a': case 'h': default:v1++; case '0':v2++; } } printf("%d %d\n", v1, v2); return 0原创 2014-04-14 14:40:59 · 1063 阅读 · 0 评论 -
[算法浅析] 划分数组,使得两个集合之和最接近
给定一个数组,元素可重复,要求分成两个数组,使得这两个数组之和的差值最小。例如:1 2 3 4 5 6那么分成:1 2 3 5 和 4 6,差值为1。输出和值较大的集合在原数组的下标。思路:设原数组之和为sum,两个集合之和分别为A和B, half = sum/2。假设A A + B = sum|half - A| = |B - half| = |(B - A)/2|接下来只要去寻找大于等于hal原创 2014-04-14 14:40:38 · 2737 阅读 · 4 评论 -
[笔试题] 只允许使用++操作符,设计减法、乘法、除法的函数
在只容许使用++运算符的情况下,请完成下面代码,实现减法,乘法和除法。注意:假设操作数全为正整数,并且可以不考虑性能,不能使用--,*,/等操作符。 #includeint Multiply(int op1, int op2) // return op1 * op2{ int re = op1; for(int i = 1; i for(int j = 1; j re++; return原创 2014-04-14 14:40:36 · 1095 阅读 · 0 评论 -
[笔试题] 腾讯某道笔试题,概率问题
答案在下方答: 0.01*3----------------------- = 28.6%0.01*3 + 0.015*5原创 2014-04-14 14:40:31 · 1011 阅读 · 1 评论 -
[杂谈] 填空题 - 宏定义的使用
#define N 3#define Y(n) ((N+1)*n)printf("%d\n", 2*(N+Y(5+1)));的结果是多少?不是很简单么当然是2*(3+4*6) = 54么,恭喜你错了。请继续想清楚再往后看。首先N = 3;那么先把所有用到N的地方都换成3现在是#define Y(n) ((N+1)*n) -> Y(n) (4*n)然后关注表达式:2*(N+Y(5+1))2*(N原创 2014-04-14 14:40:22 · 945 阅读 · 1 评论 -
[笔试题] 金山2013开发笔试 - 读程序,写结果
#includeusing namespace std;class Base{public: virtual void Func() { printf("Call Base Func \n"); } virtual ~Base() { printf("Call ~Base \n"); }};class Child : public Base{public: virtual void Func原创 2014-04-14 14:40:20 · 715 阅读 · 0 评论 -
[笔试题] 指出程序片段的三个错误
请指出以下程序片段的三处错误:char* teat(char* strIn){ char strOut[10]; if( strlen( strIn ) { strcpy( strOut, strIn); } ...省略中间处理部分 return strOut;}建议先想好了再往下看。其中一个明显的错误就是if里面的语句,strOut最多只能存储原创 2014-04-14 14:40:09 · 1242 阅读 · 0 评论 -
[算法浅析] 用两个栈实现队列
基本的思路还是很清晰的,第一个原创 2014-08-22 02:10:15 · 1277 阅读 · 0 评论