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

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

    执行用时 :80 ms, 在所有 Python3 提交中击败了20.28% 的用户
    内存消耗 :14.4 MB, 在所有 Python3 提交中击败了5.47%的用户

        class Solution:
            def searchInsert(self, nums: List[int], target: int) -> int:
                if target in nums:
                    return nums.index(target)
                else:
                    if (target<nums[0]):
                        return 0
                    elif (target>nums[len(nums)-1]):
                        nums.append(target)
                        return len(nums)-1
                    else:
                        for i in range (0,len(nums)):
                            if nums[i]<target and nums[i+1]>target:
                                nums.insert(i+1, target)
                                return i+1
    

    根据题目得知,已知一个数组是一个排序数组且无重复因素,可通过以下两个方面考虑:
    第一个:该数组中存在目标值,list.index()如果包含子字符串返回开始的索引值
    第二个:该数组不存在目标值
    1)目标值比nums[0]小,返回索引值为0
    2)目标值比数组最后一个值都大,将其添加到末尾list.append(),返回添加后的数组的长度需减一(返回添加后的数组,最后一个值的索引值)
    3)遍历数组中的元素,寻找nums[i]<target and nums[i+1>target],将目标值添加到索引值i+1的位置,返回索引值 i+1

    class Solution:
        def searchInsert(self, nums: List[int], target: int) -> int:
            left = 0
            right = len(nums) - 1
            while left <=right:
                mid = (right +left) // 2 
                if nums[mid] == target:
                    return mid
                elif nums[mid] < target:
                    left = mid + 1
                else:
                    right = mid - 1
            return left
    

    用折半查找算法,left为最左边数的索引值,right为最右边的索引值,折半查找只用于按顺序排列的数组。
    首先建立一个while循环,当(left<=right)为False时,跳出循环
    在while循环中,如果中间值nums[mid]和target相等时,返回mid
    如果中间值nums[mid]<target时,返回left在mid的基础上右移一个
    如果中间值nums[mid]>target时,返回right在mid的基础上左移一个
    (比较特殊,target小于第一个元素取left,target大于最后一个元素取right)
    算法题来自:https://leetcode-cn.com/problems/search-insert-position/

  • 相关阅读:
    16.Linux yum扩展
    15.Linux软件管理
    11.Linux用户特殊权限
    10.Linux用户权限
    9.Linux用户管理(下)
    8.Linux用户管理(上)
    6.Linux文件属性及软硬链接
    5.Linux文件管理相关命令(下)
    如何解决微服务分布式事务问题
    Redis缓存和MySQL数据一致性方案(转)
  • 原文地址:https://www.cnblogs.com/llb123/p/13398755.html
Copyright © 2011-2022 走看看