码迷,mamicode.com
首页 > 其他好文 > 详细

第二次笔试

时间:2017-10-10 14:44:40      阅读:135      评论:0      收藏:0      [点我收藏+]

标签:div   记录   [1]   color   输出   count   ota   集合   二维数组   

1.找区间,给定有序数列,找出指定目标的区间,要求复杂度为O(logn)。如[4,5,6,6,7,7,7,7,8,8,8,9,9,9] ,目标7,返回区间是[4,7]

答:肯定应用了中值法,因为复杂度为O(logn)。

 

稍后实现

2.求子集。给出一系列正整数集合求所有子集。如[1,2] -> [ [1] , [2] , [1, 2], [] ]

答:查了一下有两种方法

1.使用递归

稍后实现

2.使用二进制。所有的数在子集中只有两种状态:在->1,不在->0,就可以简单的使用+1,求出所有子集。实现如下

 1 void allSubArray(int * array, int total){
 2     int subCount = 1<<total;
 3     for(int i= 0;i<subCount;i++){
 4         int subArray[total];
 5         int subPos = 0;
 6         int mainPos = 0;
 7         int j= i;
 8         while(j!=0){
 9             if(j%2 == 1)
10             {
11                 subArray[subPos++] = array[mainPos];
12             }
13             j = j/2;
14             mainPos++;
15         }
16         showArray(subArray,subPos);
17         cout << endl;
18     }
19 }

二进制位为1,则加入子集,否则不加入,i做为计数,总个数 为2^total用左移计算的。showArray函数只是简单的输出函数。

 

3.实现简单的map[key] = value.要求满capacity时,覆盖最近不常用的

答:这道题很简单,创造动态二维数组data[capacity][2],data[i][0] = key, data[i][1] = value,count用于记录当前数组中的有效值个数 在get(key) 时,仅在[0,count-1]区间查找,并将找到的data[i] 移动到data[0],这样只用在需要覆盖时,覆盖data[capacity -1] 就行了。

第二次笔试

标签:div   记录   [1]   color   输出   count   ota   集合   二维数组   

原文地址:http://www.cnblogs.com/noprofessional/p/7644751.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!