Skip to content

35. 搜索插入位置 #51

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
buuing opened this issue Jun 10, 2021 · 0 comments
Open

35. 搜索插入位置 #51

buuing opened this issue Jun 10, 2021 · 0 comments

Comments

@buuing
Copy link
Owner

buuing commented Jun 10, 2021

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

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

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/search-insert-position
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。




  • 暴力解题
const searchInsert = (nums, target) => {
  for (let i = 0; i < nums.length; i++) {
    if (nums[i] >= target) return i
  }
  return nums.length
}
  • 二分法查找-递归
const searchInsert = (nums, target) => {
  const find = (start, end) => {
    const index = (start + end) / 2 >> 0
    const num = nums[index]
    if (start > end) return start
    if (num > target) {
      return find(start, index - 1)
    } else if (num < target) {
      return find(index + 1, end)
    } else {
      return index
    }
  }
  return find(0, nums.length - 1)
}
  • 二分法查找-迭代 (效率最高)
const searchInsert = (nums, target) => {
  let start = 0, end = nums.length - 1
  while (start < end) {
    let i = (start + end) / 2 >> 0
    if (nums[i] === target) return i
    if (nums[i] > target) {
      end = i - 1
    } else {
      start = i + 1
    }
  }
  return nums[start] >= target ? start : start + 1
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant