您当前的位置: 首页 > 

IT之一小佬

暂无认证

  • 0浏览

    0关注

    1192博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

旋转数组的最小数字

IT之一小佬 发布时间:2021-03-25 20:08:06 ,浏览量:0

旋转数组的最小数字

【题目】:

把一个数组最开始的若干元素搬到数组的末尾,我们称之为数组的旋转。输入一个【递增】排序的数组的一个旋转,输出旋转数组的最小元素。

如{3, 4, 5, 1, 2}是{1, 2, 3, 4, 5}的一个旋转,最小元素是1。

示例 1:

输入:[3,4,5,1,2]
输出:1

示例 2:

输入:[2,2,2,0,1]
输出:0

【解题思路】:

  • 设置前后指针,通过更新指针,直到两个位置只差为1的时候,第二个指针所指向的位置就是最小元素。
  • 需要注意的是两个指针指向的位置的元素一样时,就需要遍历了,如{1, 1, 1, 0, 1}

示例代码1:

def min_num(nums):
    if not nums:
        return None
    index1, index2 = 0, len(nums) - 1
    index_mid = index1
    while nums[index1] >= nums[index2]:
        if index2 - index1 == 1:
            return nums[index2]
        index_mid = (index1 + index2) // 2
        # 如果index1, index2, indexMid指向的元素相同的话,需要进行遍历
        if nums[index1] == nums[index2] and nums[index1] == nums[index_mid]:
            min_num = index1
            for i in nums[index1+1: index2+1]:
                min_num = min(min_num, i)
            return min_num
        if nums[index1] = nums[index_mid]:
            index2 = index_mid
    return nums[index_mid]


# test
nums = [3, 4, 5, 1, 2]
print("[3,4,5,1,2]:", min_num(nums))
nums = [1, 1, 1, 0, 1]
print("[1,1,1,0,1]:", min_num(nums))

运行结果:

示例代码2:

class Solution(object):
    def minArray(self, numbers):
        """
        :type numbers: List[int]
        :rtype: int
        """
        return min(numbers)

示例代码3:

class Solution(object):
    def minArray(self, numbers):
        """
        :type numbers: List[int]
        :rtype: int
        """
        for i in range(len(numbers)-1):
            if numbers[i] > numbers[i+1]:
                return numbers[i+1]
        return numbers[0]

示例代码4:

class Solution(object):
    def minArray(self, numbers):
        """
        :type numbers: List[int]
        :rtype: int
        """
        n, m = 0, len(numbers)-1
        while n < m:
            mid = (n+m) // 2
            if numbers[mid] > numbers[m]:
                n = mid + 1
            elif numbers[mid] < numbers[m]:
                m = mid
            else:
                m -= 1
        return numbers[n]

关注
打赏
1665675218
查看更多评论
立即登录/注册

微信扫码登录

0.0389s