zoukankan      html  css  js  c++  java
  • 35搜索插入位置

    题目:给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。你可以假设数组中无重复元素。

    链接:https://leetcode-cn.com/problems/search-insert-position/

    法一:

    思路:两种方法,一种是左闭右闭,另一种是左闭右开,由于区间的不同导致了最后用mid划分区间的不同,

    from typing import List
    class Solution:
        def searchInsert(self, nums: List[int], target: int) -> int:
            size = len(nums)
            if size == 0:
                return 0
            left = 0
            # 因为有可能数组的最后一个元素所在位置的下一个是我们要找的,故右边界是 len
            right = size
            # 注意这里是左闭右开
            while left < right:
                mid = (left + right) >> 1
                # 严格小于 target 的元素一定不是解
                if nums[mid] < target:
                    # 下一轮搜索区间是 [mid + 1, right]
                    left = mid + 1
                # 如果等于目标值,直接返回索引
                elif nums[mid] == target:
                    return mid
                # 由于是左闭右开,所以mid虽然已经判断过了,但右边取mid,因为右边是开区间
                elif nums[mid] > target:
                    right = mid
                # # 或者直接
                # else:
                #     right = mid
            # 如果left等于right了,一定是target不在nums中,且nums[left-1] < target,所以应该返回left
            return left
    
    from typing import List
    class Solution:
        def searchInsert(self, nums: List[int], target: int) -> int:
            left = 0
            right = len(nums) - 1
            while left <= right:
                mid = (left + right) >> 1
                if nums[mid] == target:
                    return mid
                elif nums[mid] > target:
                    right = mid - 1
                elif nums[mid] < target:
                    left = mid + 1
            print(left, right)
            # 结束while循环时的上一步是left等于right
            # 如果最后一步执行的是right = mid - 1,则说明nums[left-1]<target,而nums[left]>target,所以应该返回left
            # 如果最后一步执行的是left = mid + 1,则说明nums[right]<target,而nums[right+1]>target,并且循环结束时,left=right+1,所以返回left,
            return left
    if __name__ == '__main__':
        solution = Solution()
        # result = solution.searchInsert([1,3,5,6], 6)
        result = solution.searchInsert([1,3,5,6], -1)
        # result = solution.searchInsert([1], 0)
        print(result)
    View Code

    ttt

  • 相关阅读:
    11、序列比对
    10、RNA-seq for DE analysis training(Mapping to assign reads to genes)
    9、IPA通路分析相关网页教程
    3、perl进阶
    8、Transcriptome Assembly
    7、RNAseq Downstream Analysis
    Microsoft dynamic 批量更新
    c# datagridview 相关操作。
    $.ajax 提交数据到后台.
    c# Datatable
  • 原文地址:https://www.cnblogs.com/xxswkl/p/12344840.html
Copyright © 2011-2022 走看看