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/

  • 相关阅读:
    TypeScript Handbook 2——接口1(翻译)
    TypeScript Handbook 1——基本类型(翻译)
    [转]AJAX 跨源 HTTP 请求
    [转] Delphi Socket Architecture
    handsontable的一种js继承方式
    test11
    test
    javascript代码风格
    maven创建web项目
    Oracle 11g R2 for Win10(64位)的安装注意点
  • 原文地址:https://www.cnblogs.com/llb123/p/13398755.html
Copyright © 2011-2022 走看看