今天的这道算法题目是给定一个目标值,然后返回该目标值在数组中的位置;
如果该目标值不存在的话,就会按顺序插入到数组中,返回它将会被按顺序插入的位置
分析:
- 数组是按顺序排好的,暂且认为是从小到大的顺序
- 通过数组findIndex的方法,即可找到该目标值所在的位置,
- 如果该目标值不存在的话,则findIndex函数返回的是undefined 4、不存在的情况下,就要开始排序的方法 5、可采用快速排序,快速定位到目标值在数组的大概位置
代码:
var searchIndex = function(list,target){
let targetIndex = list.findIndex(x => x == target)
if(targetIndex && targetIndex !== -1){ //找到索引值的情况
return targetIndex
}
//没有找到目标值,快速排序法
let startIndex = list.length / 2 //数组中间位置
let middleVal = list[startIndex] //数组中间位置的值
if(target > middleVal){ //在中间值的右侧
for(let i=startIndex;i<list.length;i++){
if(list[i+1]){
if(list[i+1] > target && list[i] < target){
list.splice(i+1,0.target)
return i+1
}
} else {
list.push(target)
return list.length -1
}
}
} else { //在中间值的左侧
for(let i=startIndex;i>0;i--){
if(list[i-1]){
if(list[i-1] < target && list[i] > target){
list.splice(i-1,0.target)
return i-1
} else if(list[i] > target){
list.splice(i,0,target)
return i
}
}
}
}
}
//测试案例
var list = [1,3,5,6]
// console.log(searchInsert(list,5)) // 2
// console.log(searchInsert(list,2)) // 1
// console.log(searchInsert(list,7)) // 4
// console.log(searchInsert(list,0)) // 0
// console.log(searchInsert(list,-4)) //0