第二次笔试
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第二次笔试相关的知识,希望对你有一定的参考价值。
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] 就行了。
以上是关于第二次笔试的主要内容,如果未能解决你的问题,请参考以下文章
在使用 FirebaseRecyclerPagingAdapter 时,第二次单击 RecyclerView 中的项目时,片段显示为空