1.
下面数组是从1到n连续的数组(n>2),从中间折断交换顺序后,用二分法找到数组中 1 的索引。
数组: [n-x+1, n-x+2, ..., n - 1, n, 1, 2, 3, 4, 5, ..., n-x]
示例: [7,8,9,10,11,12,13,14,15,1,2,3,4,5,6]
我的答案:
step1:先对数组进行升序排序
例:n=15,x=9,arr=[7,8,9,10,11,12,13,14,15,1,2,3,4,5,6]
arr.slice(n-x-1,x).concat(arr.slice(0,n-x-1))
step2:二分法查找
function getLocation(arr, key, startNum, endNum) {
if (arr == null) return -1;
var middleNum = Math.floor((startNum + endNum) / 2);
console.log("中间值:" + middleNum);
if (startNum < endNum) {
if (key == arr[middleNum]) {
return middleNum + 1;
} else if (key < arr[middleNum]) {
return getLocation(arr, key, startNum, middleNum);
} else {
return getLocation(arr, key, middleNum, endNum);
}
} else if (startNum == endNum) {
return startNum;
} else {
return -1;
}
}
console.log(getLocation([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15], 10, 1, 15))
面试官说不行,不能先拼,直接二分法查找??二分法不在一个有序的数列里怎么使用?感觉是被搞了么
慕田峪9158850
芜湖不芜
相关分类