LintCode Python 简单级题目 60.搜索插入位置

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LintCode Python 简单级题目 60.搜索插入位置相关的知识,希望对你有一定的参考价值。

题目描述:

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

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

样例

[1,3,5,6],5 → 2

[1,3,5,6],2 → 1

[1,3,5,6], 7 → 4

[1,3,5,6],0 → 0

挑战 

O(log(n)) time

 

题目分析:

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

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

源码:

class Solution:
    """
    @param A : a list of integers
    @param target : an integer to be inserted
    @return : an integer
    """
    def searchInsert(self, A, target):
        # write your code here
        if A is None: return None
        if A == []: return 0
        
        n = len(A)
        if A[0] >= target: # 最小的数大于target,插入0;相等,也返回0
            return 0
            
        # 这里的if分支可省略
        # if A[-1] == target: # 最大的数等于target,返回长度n-1
        #    return n-1
        # elif A[-1] < target: # 最大的数小于target,插入末尾,返回长度n
        #    return n
            
        # 其余情况,反向遍历列表,找到第一个小于等于target的数
        for i in range(-1,-n,-1):
            if A[i] > target: # 大于target,继续循环
                continue
            elif A[i] == target: # 等于,返回n+i;因为i是负数,反向循环
                return n+i
            else:
                return n+i+1 # 小于target,在n+i位置之后插入元素,返回n+i+1

 

以上是关于LintCode Python 简单级题目 60.搜索插入位置的主要内容,如果未能解决你的问题,请参考以下文章

LintCode Python 简单级题目 82.落单的数

LintCode Python 简单级题目 517.丑数

LintCode Python 简单级题目 373.奇偶分割数组

LintCode Python 简单级题目 423.有效的括号序列

LintCode Python 简单级题目 35.翻转链表

LintCode Python 简单级题目 39.恢复旋转排序数组