首页 > 其他分享 >力扣-35-搜索插入位置

力扣-35-搜索插入位置

时间:2023-11-14 14:22:48浏览次数:50  
标签:二分法 return target nums 35 力扣 插入 middle left

一、题目

力扣地址:https://leetcode.cn/problems/search-insert-position/

二、解法思路

与标准的二分查找一直,唯一的区别为,若所需target不在nums中,需要找到insert的索引

from typing import List


class Solution:
    """
    leetcode:35
    在二分法的基础上延伸,若无法找到元素,则需要确定该元素要被insert到哪个位置。
    对于二分法左闭右闭的解法来说,当left = right时,表示该target不在nums中,且此时因为二分法的不断缩小left和right,
    其实正好等于需要insert的位置
    """

    def searchInsert(self, nums: List[int], target: int) -> int:
        # 特殊处理边界,直接返回
        if target > nums[len(nums) - 1]:
            return len(nums)
        if target < nums[0]:
            return 0
        # 标准左闭右闭的二分法,最后的return改为left边界
        left = 0
        right = len(nums) - 1
        while left <= right:
            middle = left + ((right - left) >> 1)
            if nums[middle] == target:
                return middle
            elif nums[middle] > target:
                right = middle - 1
            else:
                left = middle + 1
        else:
            return left


if __name__ == '__main__':
    s = Solution()
    print(s.searchInsert(nums=[1, 3, 5, 6], target=7))

三、其他解法与类似

...

标签:二分法,return,target,nums,35,力扣,插入,middle,left
From: https://www.cnblogs.com/chiyun/p/17831480.html

相关文章

  • 力扣-704-二分查找
    一、题目力扣链接:https://leetcode.cn/problems/binary-search/description/二、解法思路标准的二分查找题目,常规上有左闭右闭和左闭右开的解法1、左闭右闭classSolution:"""leetcode:704采用左闭右闭的方式,[left,right]区间的定义这就决定了二分法的代......
  • 二叉搜索树的插入 查找 删除
    //1、定义二叉搜索树类,封装查找、插入、删除操作删除最为麻烦,其中对于parent的保存用循环来记录while的条件需多加考虑#include<queue>#include<iostream>usingnamespacestd;classBinaryTreeNode{  private:  intvalue;  BinaryTreeNode*leftChild;......
  • [题解] P4435 [COCI2017-2018#2] ​​Garaža
    P4435[COCI2017-2018#2]Garaža给你一个长度为\(n\)的序列\(a\),单点改,查询区间\(\gcd\)不为1的子区间个数。\(n,Q\le10^5,a_i\le10^9\)。先看单次全局查询怎么做。考虑一个分治,每次我们要计算跨过分治中心\(mid\)的答案。因为这个是单调的,所以可以双指针做......
  • NOIP模拟赛35T1T2
    T1KAMEN只能说一言难尽。60pt暴力模拟每一个石头往下掉的情况。在这里,我并没有打暴力,而是用set存储了每一列的X和O的石子分布情况。当前节点的位置在(x,y),寻找x列中比y大的第一个位置在ny(这里可以用upper_bound),那么石子在这一列能往下掉到的位置就是(x,ny-1)然后再判断能......
  • P3565 [POI2014] HOT-Hotels
    题目描述:给定一棵树,在树上选\(3\)个点,要求两两距离相等,求方案数。数据范围:\(1\len\le5000\)\(1\lea,b\len\)思路:一开始我想的就是枚举两个点,然后处理第三个点。但是发现这样做非常的不正确,并且非常容易算重,所以我舍去了这种方式。但是在想这种做法的时候,我们会发现,......
  • 35-二分查找
    给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。请必须使用时间复杂度为 O(logn) 的算法。 示例1:输入:nums=[1,3,5,6],target=5输出:2示例 2:输入:nums=[1,3,5,6],target=2输......
  • P3513 [POI2011] KON-Conspiracy
    题目描述:Byteotia的领土被占领了,国王Byteasar正在打算组织秘密抵抗运动。国王需要选一些人来进行这场运动,而这些人被分为两部分:一部分成为同谋者活动在被占领区域,另一部分是后勤组织在未被占领的领土上运转。但是这里出现了一个问题:后勤组织里的任意两人都必须是熟人,以促进合作......
  • 力扣 1460 脑筋急转弯
    1460.通过翻转子数组使两个数组相等对两个数组就行排序。依次对比,有不同则返回false。所有数字一样,那就一定可以翻转使得两个数组相等,翻转次数不同而已,总能达到。当有数字不一样,那一定不会相等。classSolution{public:boolcanBeEqual(vector<int>&target,vector<int>&a......
  • 代码随想训练营第三十四天(Python)| 1005.K次取反后最大化的数组和、134. 加油站、135.
    1005.K次取反后最大化的数组和classSolution:deflargestSumAfterKNegations(self,nums:List[int],k:int)->int:nums.sort(key=lambdax:abs(x),reverse=True)foriinrange(len(nums)):ifnums[i]<0andk>0:......
  • GB28181/GB35114国标平台LiveGBS适配国产信创环境,使用国产数据库达梦数据库、高斯数据
    1、如何配置切换信创达梦数据库?livecms.ini->[db]下面添加配置如:...[db]dialect=dmurl=dm://SYSDBA:Aa12345678@localhost:5236/livegbs2、如何配置切换高斯数据库?livecms.ini->[db]下面添加配置如:...[db]dialect=gaussurl=host=192.168.2.153port=5432user=l......