给出一个有序的数组和一个目标值,如果数组中存在该目标值,则返回该目标值的下标。如果数组中不存在该目标值,则返回如果将该目标值插入这个数组应该插入的位置的下标
假设数组中没有重复项。
下面给出几个样例:
[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
}
这篇博客介绍了如何利用二分查找算法在已排序的数组中寻找目标值的正确下标。当目标值存在于数组中时,返回其下标;若不存在,返回应插入的位置。提供的代码示例展示了在不同情况下如何找到合适的位置,例如给定数组[10,30,50,60],对于目标值50、20、70和0,分别返回2、1、4和0作为结果。
706

被折叠的 条评论
为什么被折叠?



