字节面试~算法

173 阅读1分钟

35. 搜索插入位置

Difficulty: 简单

给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。

你可以假设数组中无重复元素。

示例 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

Solution

二分查找

Language: Golang

func searchInsert(nums []int, target int) int {
	//二分查找
	start := 0
	end := len(nums) - 1
	length := len(nums)
	for start <= end {
		mid := start + (end-start)/2
		if nums[mid] == target {
			return mid
		} else if mid == 0 && nums[0] > target { //如果第一个元素比,如果第一个元素都比target小,则返回0
			return 0
		} else if mid > 0 && nums[mid] > target && nums[mid-1] < target { //如果当前元素大于target,前一个元素又比target小
			return mid
		} else if mid == length-1 && nums[mid] < target { //如果最后元素的最后一个也比target小
			return length
		} else if mid > 0 && nums[mid] < target && nums[mid+1] > target {
			return mid + 1
		} else if nums[mid] > target {
			end = mid - 1
		} else if nums[mid] < target {
			start = mid + 1
		}
	}
	return 0
}

暴力查找

func searchInsert(nums []int, target int) int {
	//暴力查找
	for i := 0; i < len(nums); i++ {
		//因为是有序的
		if nums[i] >= target {
			return i
		}
	}
	return len(nums)
}