新农上路
- 积分
- 99
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2015-1-1
- 最后登录
- 1970-1-1
|
第四题可以二分写的,O(K)复杂度,假如从 0 1开始向下走,最后一层有64个,如果你要找的j小于32则j一定是0的后代,否则是1的后代,这样每次扔掉一半,k层走k次。
public class Solution {
public static int intersection(int k, int j) {
if(k<0 || j<0) return -1;
int total = 1<<k;
if(j>=total) return -1;
if(k==0) return 0;
if(k==1) return j;
int[][] arr = {{0, 1}, {1, 0}};
int idx = 0;
while(total>=2) {
total = total>>1;
if(j>=total) {
j -= total;
idx = arr[idx][1];
} else {
idx = arr[idx][0];
}
}
return arr[idx][0];
}
public static void main(String[] args) {
for(int i=0;i<8;++i) {
System.out.print(intersection(3, i) + " ");
}
System.out.println("");
}
} |
|