数组搜索插入位置(JavaScript)

221 阅读1分钟

今天的这道算法题目是给定一个目标值,然后返回该目标值在数组中的位置;
如果该目标值不存在的话,就会按顺序插入到数组中,返回它将会被按顺序插入的位置

分析:

  1. 数组是按顺序排好的,暂且认为是从小到大的顺序
  2. 通过数组findIndex的方法,即可找到该目标值所在的位置,
  3. 如果该目标值不存在的话,则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