有两个增序数组,打小长度不一定一样。要求找到两个数组merge在一起以后中,第k大的数。
这个是昨天晚上室友分享的阿里面试题。说是老题,但是还是有些启发的。。记录下:
上代码:
int getMedium(int a_start, int a_end, int b_start, int b_end, int k) { int x = (a_start + a_end) / 2; //记录a的中位数索引 int y = (b_start + b_end) / 2; //记录b的中位数索引 if(a_start > a_end) // a中元素全排除,返回b的第k大 return b[b_start+k-1]; if(b_start > b_end) // b中元素全排除,返回a的第k大 return a[a_start+k-1]; if(a[x] <= b[y]) { if(k <= (x-a_start) + (y-b_start) + 1) // 砍掉b的右边 return getMedium(a_start, a_end, b_start, y-1, k); else // 砍掉a的左边 return getMedium(x+1, a_end, b_start, b_end, k-(x-a_start)-1); } else { if(k <= (x-a_start) + (y-b_start) + 1) // 砍掉a的右边 return getMedium(a_start, x-1, b_start, b_end, k); else // 砍掉b的左边 return getMedium(a_start, a_end, y+1, b_end, k-(y-b_start)-1); } return 0;}