美文网首页
旋转数组的最小值

旋转数组的最小值

作者: 二十岁的弹簧 | 来源:发表于2018-12-10 09:43 被阅读0次

    题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素,例如,数组{3, 4, 5, 1, 2}为{1, 2, 3, 4, 5}的一个旋转,该数组最小的值为1

    递增数组(非严格)可以通过二分查找来解决问题,非严格递增需要顺序查找,旋转数组分为两个部分,第一部分的数字比第二部分的数字大,跳出迭代的条件是左右指针相邻,如果左边部分比右边部分小,说明数组没有旋转,这个时候直接返回数组第一个元素即可

    class Solution:
        def get_min(self, seq):
            if not seq:
                raise Exception("input wrong")
            length = len(seq)
            index_1 = 0
            index_2 = length - 1
            index_mid = index_1
            while seq[index_1] >= seq[index_2]:
                if index_2 - index_1 == 1:
                    index_mid = index_2
                    break
                index_mid = (index_2 + index_1) // 2
                if seq[index_1] == seq[index_2] and seq[index_2] == seq[index_mid]:
                    return self.get_min_inorder(seq, index_1, index_2)
                if seq[index_mid] <= seq[index_1]:
                    index_2 = index_mid
                elif seq[index_mid] >= seq[index_2]:
                    index_1 = index_mid
            return seq[index_mid]
        
        def get_mid_inorder(self, seq, index_1, index_2):
            result = index_1
            for i in range(index_1+1, index_2+1):
                if seq[i] < seq[result]:
                    result = i
            return seq[result]
    

    相关文章

      网友评论

          本文标题:旋转数组的最小值

          本文链接:https://www.haomeiwen.com/subject/pozlhqtx.html