四道微软面试算法题 [个人解法]
来源:互联网 发布:浮生知星辰在线阅读 编辑:程序博客网 时间:2024/04/27 22:13
- /****************************************************************************
- 题目要求 :一个整数数列,元素取值可能是0~65535中的任意一个数,相同数值不会重复出现。0是例外,可以反复出现。
- 请设计一个算法,当你从该数列中随意选取5个数值,判断这5个数值是否连续相邻。
- 注意:
- - 5个数值允许是乱序的。比如: 8 7 5 0 6
- - 0可以通配任意数值。比如:8 7 5 0 6 中的0可以通配成9或者4
- - 0可以多次出现。
- - 复杂度如果是O(n2)则不得分。
- 用C描述的算法
- 功能 :判断随意取的数值是否连续相邻,相邻返回1,否则返回0
- 参数array :存储随意取的数
- 参数size :随意取的数的个数
- ****************************************************************************/
- int is_progression(array, size)
- {
- /*最大值的索引和最小值的索引*/
- maxIndex = 0;
- minIndex = 0;
- i = 0;
- /*试图找到第一个不为0的元素,初始化maxIndex和minIndex*/
- for ( ; i < size; ++i )
- {
- if ( array[i] != 0 )
- {
- maxIndex = minIndex = i;
- break;
- }
- }
- /*试图确定随意取的数中的最大值和最小值*/
- for ( ; i < size; ++i )
- {
- if ( array[i] > array[maxIndex] )
- {
- maxIndex = i;
- }
- else if ( array[i] < array[minIndex] )
- {
- minIndex = i;
- }
- }
- /*如果最大值和最小值的差小于总个数,则可以判定它们是连续相邻的*/
- return (array[maxIndex] - array[minIndex]) < size ? 1 : 0;
- }
- /****************************************************************************
- 题目要求 :设计一个算法,找出二叉树上任意两个结点的最近共同父结点。
- 复杂度如果是O(n2)则不得分。
- 用C描述的算法,注释略
- ****************************************************************************/
- typedef int datatype
- typedef struct tree_node{
- datatype data;
- struct tree_node *lchild;
- struct teee_node *rchild;
- }treenode, *lptreenode;
- treenode* find_parentnode(tree, node1, node2)
- {
- initstack(s);
- push(s, tree);
- finded = 0;
- parentnode = tree;
- while ( !stackempty(s) )
- {
- while ( gettop(s, p) && p )
- {
- if ( p == node1 )
- {
- finded += 1;
- }
- if ( p == node2 )
- {
- finded += 1;
- }
- if ( finded == 0 )
- {
- parentnode = p;
- break;
- }
- else if ( finded == 2 )
- {
- break;
- }
- push(s, p->lchild);
- }
- if ( finded == 3 )
- {
- break;
- }
- else if ( parentnode != NULL )
- {
- while ( pop(s, p) && p == parentnode )
- {
- break;
- }
- push(s, p->rchild);
- }
- }
- return finded == 3 ? parentnode : NULL;
- }
- /****************************************************************************
- 题目要求 :一棵排序二叉树,令 f=(最大值+最小值)/2,设计一个算法,找出距离f值最近、大于f值的结点。
- 复杂度如果是O(n2)则不得分。
- 用C描述的算法,注释略
- ****************************************************************************/
- treenode* find_parentnode(tree, f)
- {
- tempnode = tree;
- while ( tempnode )
- {
- if ( tempnode->data > f )
- {
- if ( NULL == tree->lchild
- || tree->lchild->data <= f )
- {
- break;
- }
- tempnode = tree->lchild;
- }
- else
- {
- if ( NULL == (tempnode = tempnode->right)
- || tempnode->data > f )
- {
- break;
- }
- }
- }
- return tempnode;
- }
- /****************************************************************************
- 题目要求 :一个整数数列,元素取值可能是1~N(N是一个较大的正整数)中的任意一个数,相同数值不会重复出现。
- 设计一个算法,找出数列中符合条件的数对的个数,满足数对中两数的和等于N+1。
- 复杂度最好是O(n),如果是O(n2)则不得分。
- 用C描述的算法,注释略
- ****************************************************************************/
- int get_numberpair_count(array, size, N)
- {
- count = 0;
- temp_array_size = N / 2 + 1;
- temp_index = 0;
- temp_array[temp_array_size];
- for ( i = 0; i < size; ++i )
- {
- temp_index = array[i] < temp_array_size ? array[i] : (N-array[i]);
- if ( temp_array[temp_index] == 1 )
- {
- ++count;
- }
- else
- {
- temp_array[temp_index] = 1;
- }
- }
- return count;
- }
- 四道微软面试算法题 [个人解法]
- 四道微软面试算法题 [个人解法]
- 四道微软面试算法题
- 四道微软面试算法题
- 四道微软面试算法题
- 四道微软面试算法题
- 四道微软面试算法题
- 四道微软面试算法题
- 四道微软面试算法题
- 四道微软面试算法题
- 关于微软面试100题系列中两道题目的个人解法
- 微软面试算法题
- 一道微软算法题的java解法
- 一道微软算法题的java解法
- 算法面试:精选微软经典的算法面试100题
- 算法面试:精选微软经典的算法面试100题
- 算法面试:精选微软经典的算法面试100题
- 算法面试:精选微软经典的算法面试100题
- css代码
- ubuntu8.10下编译安装pidgin2.5.1
- html中空元素的写法问题
- 将string转化为int、double
- 牢骚
- 四道微软面试算法题 [个人解法]
- [MSSQL]以前的某个程序安装已在安装计算机上创建挂起的文件操作 解决办法
- 四道微软面试算法题 [个人解法]
- C#抽象类
- 今日落户
- 某公司C笔试题 [个人解法]
- 大型网站架构演变和知识体系
- 在软件开发中资源使用
- 个人职业生涯感悟