给出一个有序的数组和一个目标值,如果数组中存在该目标值,则返回该目标值的下标。如果数组中不存在该目标值,则返回如果将该目标值插入这个数组应该插入的位置的下标
假设数组中没有重复项。
下面给出几个样例:
[10,30,50,60], 50 → 2
[10,30,50,60], 20 → 1
[10,30,50,60], 70 → 4
[10,30,50,60], 0 → 0
思路:查找插入的位置,也就是查找左边比他小,右边比他大的位置。采用二分查找法。
package main
/**
*
* @param A int整型一维数组
* @param target int整型
* @return int整型
*/
func searchInsert( A []int , target int ) int {
// write code here
right := len(A) - 1
left := 0
if A[left] >= target {
return left
}
if A[right] < target {
return right + 1
}
for left <= right {
mid := (left + right) / 2
if A[mid] == target {
return mid
}
if A[mid] > target {
if mid != 0 && A[mid-1] < target {
return mid
}
right = mid - 1
} else {
if mid != len(A)-1 && A[mid+1] >= target {
return mid + 1
}
left = mid + 1
}
}
return 0
}