题目:
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
你可以假设数组中无重复元素。
示例 1:
- 输入: [1,3,5,6], 5
- 输出: 2
示例 2:
- 输入: [1,3,5,6], 2
- 输出: 1
示例 3:
- 输入: [1,3,5,6], 7
- 输出: 4
示例 4:
- 输入: [1,3,5,6], 0
- 输出: 0
java:
public static int searchInsert1(int[] nums, int target) {
int len = nums.length;
//定义区间.
int low = 0;
int high = len - 1;
while (low <= high) {
int mid = low + (high - low) / 2;
if (nums[mid] > target) {
high = mid - 1;
} else if (nums[mid] < target) {
low = mid + 1;
} else {
return mid;
}
}
return high + 1;
}
public static int searchInsert2(int[] nums, int target) {
int left = 0;
int right = nums.length;
while (left < right) {
int mid = left + ((right - left) >> 1);
if (nums[mid] > target) {
right = mid;
} else if (nums[mid] < target) {
left = mid + 1;
}else {
return mid;
}
}
return right;
}
public static void main(String[] args) {
int[] nums = {1, 3, 5, 6};
int i = searchInsert1(nums, 0);
System.out.println(i);
int[] nums2 = {1, 3, 5, 6};
int i2 = searchInsert1(nums2, 0);
System.out.println(i2);
}
}
Go:
func SearchInsert(nums []int, target int) int {
left, right := 0, len(nums)-1
for left <= right {
mid := left + (right-left)>>1
if nums[mid] == target {
return mid
} else if nums[mid] > target {
right = mid - 1
} else if nums[mid] < target {
left = mid + 1
}
}
return right + 1
}
func main() {
array := []int{1, 2, 3, 4, 5}
index := LeetCode.SearchInsert(array, 6)
fmt.Println(index)
}
道阻且长.行则将至.
***如果大家喜欢我的分享的话.可以关注我的微信公众号
念何架构之路