zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    leetcode 105. 从前序与中序遍历序列构造二叉树
    leetcode 96. 不同的二叉搜索树
    leetcode 21. 合并两个有序链表
    leetcode 617. 合并二叉树
    leetcode 101. 对称二叉树
    欧拉定理和扩展欧拉定理。
    [NOI2018] 屠龙勇士
    [SDOI2010]古代猪文
    [SDOI2013]方程
    扩展Lucas定理
  • 原文地址:https://www.cnblogs.com/bozhou/p/6956422.html
Copyright © 2011-2022 走看看