更一份微信的面试题
来源:互联网 发布:qq软件下载 编辑:程序博客网 时间:2024/05/16 01:09
1 给定一个递增循环整数数组,最小的整数可能出现在数组的中间,例如,
int array[] = {7, 9, 10, 51, 56, 0, 2};
求查找某个值的算法,给定函数头如下
int find(int array[], int len, int key);
找到了就返回元素下标,没找到就返回-1。
这是一道很基本的考分治的题,复杂度可以为logN,这里顺带整理一下算法界的hello world——二分查找
二分查找可以有两种做法:递归和循环(感觉除了函数头不一样,其他地方都差不多)
递归代码:
int binarySearch1(int array[], int low, int high, int key) //recursion{if (low <= high){int mid = (low + high)/2;if (key == array[mid])return mid;else if (key > array[mid])return binarySearch1(array,mid+1,high,key);elsereturn binarySearch1(array,low,high-1,key);}elsereturn -1;}
循环代码:
int binarySearch2(int array[], int len, int key) //circle{int low = 0, high = len - 1, mid;while (low <= high){mid = (low + high)/2;if (key == array[mid])return mid;else if (key > array[mid])low = mid + 1;elsehigh = mid - 1;}return -1;}
接下来就是微信的这道题了,先确定一个有序的半边数组,如果key落在这半边,则直接用二分查找法,如果落在另外半边,则递归一次。
代码如下:
int findHelper(int array[], int low, int high, int key) //convient for recursion{if (low <= high){int mid = (low + high)/2;if (array[mid] > array[high]) //increase in the left part{if ((key >= array[low])&&(key <= array[mid]))return binarySearch1(array, low, mid, key);elsereturn findHelper(array, mid + 1, high, key);}else{if ((key >= array[mid+1])&&(key <= array[high]))return binarySearch1(array, mid + 1, high ,key);elsereturn findHelper(array, low, mid, key);}}elsereturn -1;}int find(int array[], int len, int key){int low = 0, high = len -1;findHelper(array, low, high, key);}
这里用findHelper来实现只是为了换下函数头,微信原题里限定了函数头,递归不好实现
最后是main函数,也就是测试函数:
int main() {int array[] = { 7, 9, 11, 19, 8750, 1, 4, 6};cout << find(array, sizeof(array)/sizeof(*array), 8);return 0;}
这里在Eclipse测试,代码没问题~简单代码就不贴测试结果啦。这道题就这样完结.
2 编写一个能将给定非负整数列表中的数字排列成最大数字的函数。例如,给定[50,2,1,9],最大数字为95021。
给定函数头:
string LargestNum(vector <int> num);
3 有字符串表示的一个四则运算表达式,要求计算出该表达式的正确数值。四则运算即:加减乘除"+-*/",另外该表达式中的数字只能是1位(数值范围0~9)。另若有不能整除的情况,按向下取整处理,eg: 8/3得出值为2。例如若有字符串"8+7*2-9/3",计算出其值为19。给定函数头:
double Cal(const char* str);
这道题的答案见这里:http://blog.csdn.net/lyintong/article/details/51046037
0 0
- 更一份微信的面试题
- 一份不错的面试题
- 一份不错的面试题
- GOOGLE公司的一份面试题揭密
- GOOGLE的一份面试题揭密
- 一份 PHP 面试题,据说是雅虎的
- Google的一份面试题集
- Google的一份面试题集
- 一份TIBCO产品相关的面试题
- 一份招PHP高级工程师的面试题
- 一份招PHP高级工程师的面试题
- 一份超级全面的PHP面试题
- 一份超级全面的PHP面试题
- 一份超级全面的PHP面试题
- 一份招PHP高级工程师的面试题
- 比较好的一份面试题
- 一份薪资7000-8000的面试题
- 一份面试题的总结 1
- ubuntu技巧--sublime text 3 解决中文输入
- 【Unity】Unlit系列shader,使用注意!
- 比较15个数的大小
- php小经验:解析preg_match与preg_match_all 函数
- 网络协议系列之三:IP
- 更一份微信的面试题
- 第1条:考虑用静态工厂方法代替构造器
- [笔记]Function类型
- 【rtmp】AAC编码注意事项
- git submodule的使用,主项目和公共库关联起来
- 状态模式
- java 多线程访问全局变量,值为null
- 常见数据库连接池(DBCP,C3P0,Proxool,BoneCP)比较
- 中国银联mPOS通用技术安全分析和规范解读