程序员笔试面试
文章平均质量分 71
「已注销」
这个作者很懒,什么都没留下…
展开
-
笔试题目“翻转字符串”的实现
最近找实习,要面试各种公司,据说这题在笔试或者面试当中,出现的频率非常高//写一个函数,将字符串翻转,翻转方式如下:“I am a student”反转成“student a am I”,不借助任何库函数。我自己写了个实现:/**将字符串翻转*翻转方式如下:“I am a student”反转成“student a am I”**方法:*先反转整个字符串,然后原创 2013-04-23 22:56:21 · 5151 阅读 · 0 评论 -
常用的排序算法:插入排序,希尔排序,冒泡排序,选择排序,快速排序,归并排序
昨晚准备今天的腾讯实习生的面试,就把常用的排序算法又写了一遍,放这儿吧,以后没事看看。Sort.h#ifndef SORT_H#define SORT_Hvoid insertSort(int x[], int n);void shellSort(int x[], int n);void bubbleSort(int x[], int n);void selec原创 2013-04-23 16:14:13 · 1627 阅读 · 2 评论 -
在一个数组中查找最大的K个元素或者最小的K个元素
面试中经常会遇到查找最大的K个元素或者最小的K个元素的问题。如果是查找最大的K个元素,就用小根堆,如果当前元素比堆的根都元素大,那么一定要放到堆里来,用当前元素替换根元素(因为根的元素是最小的),然后调整堆。查找最小的K个元素用大根堆同理。上代码:#include using namespace std;//在数组arr[1..size]中,使得以i为根的子堆保持大根堆的原创 2013-04-27 11:30:41 · 1527 阅读 · 0 评论 -
用queue实现的基数排序RadixSort
代码是用queue实现的基数排序,其中arrlength表示数组长度,maxbit表示arr数组中int型整数的最大位数,如果maxbit=3,表示最大为3位数,即不超过999/**************************************/* /* 函数名 : Radix Sort/* **********************************原创 2013-04-26 23:17:44 · 1257 阅读 · 0 评论 -
逆转一个整数的二进制表示问题
写一个函数逆转整数的二进制表示 unsigned ReverseBit(unsigned x);unsigned x = RevBit(0xf0ec9999);x应该为 0x9999370f。0xf0ec9999 == 11110000111011001001100110011001(二进制)0x9999370f == 10011001100110010011011100001原创 2013-05-04 00:13:04 · 2183 阅读 · 0 评论 -
堆和堆排序
堆,是一棵完全二叉树,根的值大于左右子树中所有结点的值,左右子树也是堆,除此之外,对其它元素之间的大小关系(如左右子树之间元素大小关系)没有要求。这是大根堆,如果把“大于”换成“小于”,就是小根堆,这里都以大根堆为例。由于堆是完全二叉树,所以可以用数组来模拟,在数据结构上算是比较简单。用数组模拟二叉树(当然也包括堆)的话,如果根节点的下标为0的话,则对于每个结点i,其左孩子下标为2*i+1;其原创 2013-04-26 19:55:14 · 1123 阅读 · 0 评论 -
八卦消息传播时间
八卦消息传播时间一.问题描述假如我们班有n个MM,每一个MM都有一个独家八卦消息。两个MM可以通过电话联系,一通电话将使得双方都获知到对方目前已知的全部消息。要想所有n个MM都知道所有n条八卦消息,最少需要多少通电话?请给出你们的通话方案。二.假设1、每位MM对打电话都没有厌烦情绪,即多打、少打无所谓。三.问题分析1、当n很小时我们很容易通过枚举的方法找出最佳通话方案:原创 2013-05-19 23:44:06 · 2050 阅读 · 0 评论 -
KMP算法详解
KMP算法详解 如果机房马上要关门了,或者你急着要和MM约会,请直接跳到第六个自然段。 我们这里说的KMP不是拿来放电影的(虽然我很喜欢这个软件),而是一种算法。KMP算法是拿来处理字符串匹配的。换句话说,给你两个字符串,你需要回答,B串是否是A串的子串(A串是否包含B串)。比如,字符串A="I'm matrix67",字符串B="matrix",我们就说B是A的子串。转载 2013-05-20 10:33:37 · 1258 阅读 · 0 评论 -
寻找丑数(Ugly Number)
题目:我们把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。习惯上我们把1当做是第一个丑数。 求按从小到大的顺序的第1500个丑数。 分析:这是一道在网络上广为流传的面试题,据说Google曾经采用过这道题。 方法一:从小到大的遍历,这是我们最容易想到的方法了吧。不过这种方法很耗时间,用下面的代码查找第1500个丑数原创 2013-05-05 23:05:00 · 2444 阅读 · 0 评论 -
【转】博弈论--取物品和Nim游戏
感慨数学归纳法真强大!郗博的文章写得真好,情不自禁的就转过来了。PS:今天晚上在实验室研究这些东西的时候用手抓到两只蚊子,并且好像都残了,前进的路上总是沾满了XX。。。分为三个部分,第一部分是简单版的甲乙两人取物品,第二部分是博弈论中经典的模型--Nim游戏,最后是关于Nim游戏的介绍和Bouton's Theorem。第一部分:简单版的甲乙两人取物品前序先来看原创 2013-05-08 02:27:34 · 2667 阅读 · 0 评论 -
散列表(哈希hash)初步
1. 引言 哈希表(Hash Table)作为一种高效的数据结构,正在发挥着重要的作用。 哈希表最大的优点,就是把数据的存储和查找消耗的时间大大降低,几乎可以看成是常数时间;而代价仅仅是消耗比较多的内存。然而在当前可利用内存越来越多的情况下,用空间换时间的做法是值得的。另外,编码比较容易也是它的特点之一。 哈希表又叫做散列表,分为“开散列” 和“闭散列”。考虑到原创 2013-05-08 23:01:17 · 1454 阅读 · 0 评论 -
网易有道笔试题
这几道题都是从网上找的不知道是哪一年的网易有道的笔试题,拿来做做,练练手。1、打印如下形式的矩阵;n=5:1 2 9 10 254 3 8 11 245 6 7 12 2316 15 14 13 2原创 2013-05-31 19:37:17 · 8554 阅读 · 0 评论 -
最长重复子串(LongestRepeatSubstring)
一个单字符串问题。子字符串a在字符串S中至少出现两次,则称a是S的重复子串。如果某个子串在目标字符串中出现两次,那么它必将出现在两个不同的后缀中,因此对后缀数组进行排序,以寻找相同的后缀,然后扫描数组,比较相邻的元素便可以找出最长的重复子串。#includeusing namespace std;int comlen(char* a, char* b){ int len = 0;原创 2013-06-07 11:14:50 · 1824 阅读 · 0 评论 -
卡特兰数(Catalan)及其应用
卡特兰数卡特兰数是组合数学中一个常出现在各种计数问题中出现的数列。卡特兰数前几项为 : C0=1,C1=1,C2=2,C3=5,C4=14,C5=42,C6=132,C7=429,C8=1430,C9=4862,C10=167961, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796, 58786, 208012, 742900, 2674440原创 2013-05-03 16:54:52 · 18802 阅读 · 5 评论 -
兄弟单词
好长时间没写blog了,写一篇表示我还活着,还在看代码,还在准备笔试和面试。。。兄弟的单词就是两个或多个单词有相同的字母,只是字母顺序不同,例如:abfs 和fabs。找到所给单词的兄弟单词。方案一:使用数据结构 map。兄弟单词共用一个签名key,key为单词内部排序后的词条,list存储同一key的单词集合;把相同key的兄弟单词组成一个链表。代码:#include#incl原创 2013-07-08 23:38:02 · 7671 阅读 · 0 评论 -
2013年阿里巴巴暑期实习生笔试题--2013年5月5日考试
昨天本来想去参加北大的笔试,结果去了说不给霸笔,尼玛,好吧,哥又乖乖的回来了,现在有网上有题目了,拿过来做做,好好准备下参加19号的笔试!--------------------------------------------------------------------------------------------------------------答题说明:1.原创 2013-05-06 09:20:56 · 24253 阅读 · 53 评论 -
Reservoir Sampling - 蓄水池抽样
问题起源于编程珠玑Column 12中的题目10,其描述如下: How could you select one of n objects at random, where you see the objects sequentially but you do not know the value of n beforehand? For concreteness, how woul转载 2013-08-31 21:03:16 · 1508 阅读 · 0 评论 -
等概率随机函数的实现
我们知道在C语言中有rand()函数可以提供随机数,rand()函数的范围为0到32727。我们假定认为rand()产生的随机数在0到32727范围内是等概率的。如果我们需要得到一个小范围内的随机数,比如0到55之间的随机数,那我们可以采用rand()%55。但是对于我们要得到一个更大范围内的随机数,rand()便满足不了我们的要求。1、用大的随机函数生成小的随机函数利用等概率Rand原创 2013-08-31 22:13:05 · 5877 阅读 · 0 评论 -
兄弟数字
给定一个数X,他的兄弟数Y定义为:是由X中的数字组合而成,并且Y是大于X的数中最小的。例如,38276的兄弟数字为38627。给定X,求Y。分析当开始想到这个题目的时候就想到和求排列很像,想借用排列的方法,但是发现用这个方法不知道在哪里停止,无法降低O(n^2)的复杂度。那有没有更好的方法呢?不想对所有情况进行穷举,就要想办法,尽可能缩小要处理的范围,一般的思路,从右边开始,两两交原创 2013-09-07 19:07:55 · 3189 阅读 · 0 评论 -
消失的K个数字
原题从1到n,n个数字,每个数字只出现一次。现在,随机拿走一个数字,请给出方法,找到这个数字。如果随机拿走两个数字呢?如果随机拿走k个数字呢?分析这个题目的含义是:n-1互不相同的整数,取值范围是[1,n],请找到1-n中,没有出现的整数(好像更难理解了:))。当缺少一个数字的时候,很简单。方法1:计算1到n的和sum_more,然后再将n-原创 2013-09-07 19:51:21 · 1756 阅读 · 0 评论 -
单链表和
最近在准备面试,把做过的看过的题目都放在这里,做个记录。-----------------------------------------------------------------原题:两个单链表(singly linked list),每一个节点里面一个0-9的数字,输入就相当于两个大数了。然后返回这两个数的和(一个新list)。这两个输入的list长度相等。 要求转载 2013-09-08 22:17:02 · 990 阅读 · 0 评论 -
拿石头-斐波那契博弈
最近在准备面试,把做过的看过的题目都放在这里,做个记录。这道题我原来的Blog里就有,再看一遍加深印象。-----------------------------------------------------------------原题:两个玩家,一堆石头,假设多于100块,两人依次拿,最后拿光者赢,规则是:第一个人不能一次拿光所有的;第一次拿了之后, 每人每次最转载 2013-09-08 20:34:03 · 2027 阅读 · 1 评论 -
通配符的字符串匹配算法
1. 简述 题目描述: Str1中可能包含的字符:除了'*'和'?'以外的任意字符。 Str2中可能包含的字符:任意字符。其中,'?'表示匹配任意一个字符,'*'表示匹配任意字符0或者多次。 给出这样两个字符串,判断Str2是否是Str1的子串,如果是输出第一个匹配到的子串,如果不是,输出"不是子串"。2. 分析 对于'?'的处理,转载 2013-09-05 17:54:14 · 8970 阅读 · 1 评论 -
leetcode_question_70 Climbing Stairs
You are climbing a stair case. It takes n steps to reach to the top.Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top?int climbStairs(int n) {原创 2013-09-14 12:47:05 · 1280 阅读 · 0 评论 -
最多连续数的子集
题目:给一个整数数组, 找到其中包含最多连续数的子集,比如给:15, 7, 12, 6, 14, 13, 9, 11,则返回: 5:[11, 12, 13, 14, 15] 。最简单的方法是sort然后scan一遍,但是要o(nlgn),有什么O(n)的方法吗?分析:我们先来学习一种叫做并查集的数据结构。并查集(Disjoint set或者Union-find se原创 2013-09-14 01:09:57 · 2652 阅读 · 0 评论 -
Leetcode Problem difficulty level and frequency table
Author: peking2 Leetcode QuestionsIdQuestionDifficultyFreqencyData StructuresAlgorithms1Two Sum25arraysetsorttwo pointers2Add Two Number转载 2013-09-13 23:45:45 · 9390 阅读 · 0 评论 -
leetcode_question_67 Add Binary
Given two binary strings, return their sum (also a binary string).For example,a = "11"b = "1"Return "100".bool isAllZero(string a){ for (int i = 0; i < a.length(); ++i) {原创 2013-09-14 12:29:49 · 1432 阅读 · 0 评论 -
Leetcode: Reverse Integer
Reverse digits of an integer.Example1: x = 123, return 321Example2: x = -123, return -321click to show spoilers.Have you thought about this?Here are some good questions to ask before coding.原创 2013-09-30 11:46:51 · 10485 阅读 · 3 评论 -
leetcode_question_72 Edit Distance
Given two words word1 and word2, find the minimum number of steps required to convert word1 to word2. (each operation is counted as 1 step.)You have the following 3 operations permitted on a w原创 2013-09-14 23:28:31 · 2187 阅读 · 0 评论 -
leetcode_question_26 Remove Duplicates from Sorted Array
Given a sorted array, remove the duplicates in place such that each element appear only once and return the new length.Do not allocate extra space for another array, you must do this in place with原创 2013-09-15 01:24:46 · 1253 阅读 · 0 评论 -
leetcode_question_53 Maximum Subarray
Find the contiguous subarray within an array (containing at least one number) which has the largest sum.For example, given the array [−2,1,−3,4,−1,2,1,−5,4],the contiguous subarray [4,−1,2,1] ha原创 2013-09-15 16:41:21 · 1451 阅读 · 0 评论 -
Leetcode: Spiral Matrix
Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order.For example,Given the following matrix:[ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ]]原创 2013-09-30 23:23:06 · 2212 阅读 · 0 评论 -
Leetcode: Merge Two Sorted Lists
Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists./** * Definition for singly-linked list. * struct原创 2013-09-30 23:46:13 · 2058 阅读 · 0 评论 -
leetcode_question_64 Minimum Path Sum
Given a m x n grid filled with non-negative numbers, find a path from top left to bottom right which minimizes the sum of all numbers along its path.Note: You can only move either down or righ原创 2013-09-14 16:07:10 · 1277 阅读 · 0 评论 -
leetcode_question_27 Remove Element
Given an array and a value, remove all instances of that value in place and return the new length.The order of elements can be changed. It doesn't matter what you leave beyond the new length.i原创 2013-09-15 01:36:18 · 1237 阅读 · 0 评论 -
leetcode_question_63 Unique Paths II
Follow up for "Unique Paths":Now consider if some obstacles are added to the grids. How many unique paths would there be?An obstacle and empty space is marked as 1 and 0 respectively in the原创 2013-09-14 16:37:20 · 1652 阅读 · 0 评论 -
Leetcode: Integer to Roman
Given a roman numeral, convert it to an integer.Input is guaranteed to be within the range from 1 to 3999.罗马数字是由字符I,V,X,L,C,D,M等等表示的,其中I = 1;V = 5;X = 10;L = 50;C = 100;D = 500;M =原创 2013-10-01 11:59:21 · 2672 阅读 · 0 评论 -
Leetcode: String to Integer (atoi)
Implement atoi to convert a string to an integer.Hint: Carefully consider all possible input cases. If you want a challenge, please do not see below and ask yourself what are the possible input原创 2013-09-30 22:27:46 · 2021 阅读 · 0 评论 -
Leetcode: Roman to Integer
Given a roman numeral, convert it to an integer.Input is guaranteed to be within the range from 1 to 3999.利用上一题的程序:Judge Small: Accepted!Judge Large:Time Limit Exceededmap romanmp;原创 2013-10-01 16:21:36 · 4690 阅读 · 1 评论 -
Leetcode: Letter Combinations of a Phone Number
Given a digit string, return all possible letter combinations that the number could represent.A mapping of digit to letters (just like on the telephone buttons) is given below.Input:Digit string原创 2013-10-01 17:42:34 · 2103 阅读 · 0 评论