码迷,mamicode.com
首页 > 其他好文 > 详细

search insert position

时间:2018-06-20 11:12:30      阅读:149      评论:0      收藏:0      [点我收藏+]

标签:一个   方法   是的   IV   分享图片   pos   结果   range   get   

题目:

技术分享图片

 

有两种思路,一种是采用简单的搜索,可以一个一个的向上检索,直到匹配;另外一种是采用折半查找,如果存在array[middle]==target那么直接返回target的位置,否则的话,找到low和high相等的位置,判断数组中此位置的值是否大于等于target,是的话就直接返回low,否则返回low+1;

第一种思路的代码:

def true_index_search(array, target):
    index = 0
    while index < len(array):
        if target == array[index]:
            break
        elif target < array[index]:
            break
        else:
            index += 1
    return index

我测试了第一种方法在leetcode上的效率:

技术分享图片

 

第二种思路的代码:

def search_index(array, target):
    high = len(array)
    low = 0
    if high == 0 or array[0] > target:
        return 0
    elif array[high-1] < target:
        return high
    else:
        high -= 1
        while high > low:
            middle = int(low + (high - low)/2)
            if array[middle] == target:
                return middle
            else:
                if array[middle] > target:
                    high = middle - 1
                else:
                    low = middle + 1
        if array[low] >= target:
            return low
        else:
            return low+1

我测试了第二种方法在leetcode上的效率:

技术分享图片

 

我写了一个测试程序,判断第二个程序的正确率:

import random
def test_function():
    times = 100000
    right = 0
    for time in range(times):
        len = random.randint(0, 1000)
        array = []
        for i in range(len):
            array.append(random.randint(0, 1000))
        array_set = list(set(array))
        array_set.sort()
        target = random.randint(0, 10000)
        myvalue = search_index(array_set, target)
        true_value = true_index_search(array_set, target)
        if myvalue == true_value:
            right += 1
    return float(right)/float(times)

if __name__ == "__main__":
    value = test_function()
    print(value)

结果如下:

技术分享图片

 

 可以看到第二种方法和第一种方法的效果相同,但是第二种方法的效率要比第一种方法高得多。在用折半查找做这道题的时候, 要特别注意判断条件。

search insert position

标签:一个   方法   是的   IV   分享图片   pos   结果   range   get   

原文地址:https://www.cnblogs.com/whatyouknow123/p/9202552.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!