zoukankan      html  css  js  c++  java
  • 二分查找总结及部分Lintcode题目分析 2

    Search in a big sorted array,这个比之前的二分法模板多了一个很不同的特性,就是无法知道一个重要的条件end值,也是题目中强调的重点 The array is so big so that you can not get the length of the whole array directly~所以这里单独分析这个问题~

    一般涉及到sorted array,肯定可以的解决方法是for loop,然而for loop的复杂度是O(n),而且对于这个长度无法衡量的big sorted array也并不适用。而且,看到sorted array可以联想到的就是binary search啦~所以第一步就是怎么确定这个end值~

    index = 1
            while reader.get(index) < target:
                index = index * 2
            start = 0
            end = index

     (这个reader是题目给定的python get element的方法)由于是sorted array,如果这个 target 存在,那么必然从某个节点开始,之后所有的元素都大于这个 target,我们保留有解的一半的思想,这里相当于就给这个big sorted array分为了两个部分,我们取有解的前一部分,放弃必然大于target的后一部分。这时候也就找到了end的值~就把他转化成了一个长度可计的sorted array,再套用二分法的解题模板就可以解决这个问题。po个解法~

    """
    Definition of ArrayReader:
    class ArrayReader:
        def get(self, index):
            # this would return the number on the given index
            # return -1 if index is less than zero.
    """
    class Solution:
        # @param {ArrayReader} reader: An instance of ArrayReader 
        # @param {int} target an integer
        # @return {int} an integer
        def searchBigSortedArray(self, reader, target):
            index = 1
            while reader.get(index) < target:
                index = index * 2
            start = 0
            end = index
            while start + 1 < end:
                mid = start + (end - start) / 2
                if reader.get(mid) == target:
                    end =  mid
                elif reader.get(mid) < target:
                    start = mid
                else:
                    end = mid
            if reader.get(start) == target:
                return start
            if  reader.get(end) == target:
                return end
            return -1
    
  • 相关阅读:
    Spark函数详解系列之RDD基本转换
    Spark算子之aggregateByKey详解
    基于Apache Spark机器学习的客户流失预测
    Spark partitionBy
    Spark中repartition和partitionBy的区别
    Spark快速获得CrossValidator的最佳模型参数
    Spark MLlib之水塘抽样算法(Reservoir Sampling)
    机器学习-加权采样算法简介
    基于Spark的大数据精准营销中搜狗搜索引擎的用户画像挖掘(转)
    Mark 装修建材 清单
  • 原文地址:https://www.cnblogs.com/chercher/p/5639939.html
Copyright © 2011-2022 走看看