📌  相关文章
📜  排序和旋转数组中的最大元素(1)

📅  最后修改于: 2023-12-03 15:25:55.678000             🧑  作者: Mango

排序和旋转数组中的最大元素

在数组中找出最大元素是编程中最基本的问题之一,但是当数组进行排序和旋转后,这个问题会变得更加困难。在这里,我们将介绍如何在排序和旋转数组中找出最大元素。

排序数组中的最大元素

如果数组是已经排序过的,那么最大元素就是数组的最后一个元素。这个问题非常简单,只需要返回数组的最后一个元素即可。

def find_max_sorted_array(nums):
    return nums[-1]
旋转数组中的最大元素

如果数组被旋转了,那么最大元素就不再是数组的最后一个元素,而是数组中的某个元素。我们可以使用二分查找来解决这个问题。具体步骤如下:

  1. 初始化左右指针 left = 0right = len(nums)-1
  2. left < right 时进行循环。
  3. 在数组中找到中间元素:mid = (left + right) // 2
  4. 如果 nums[mid] < nums[right],说明最大元素在 mid 的左边,将右指针移动到 mid
  5. 如果 nums[mid] > nums[right],说明最大元素在 mid 的右边,将左指针移动到 mid+1
  6. 如果 nums[mid] == nums[right],需要将右指针减一,因为 nums[right] 肯定不是最大元素。
  7. 当循环结束时,左指针所指向的元素就是最大元素。
def find_max_rotated_array(nums):
    left, right = 0, len(nums)-1
    while left < right:
        mid = (left + right) // 2
        if nums[mid] < nums[right]:
            right = mid
        elif nums[mid] > nums[right]:
            left = mid + 1
        else:
            right -= 1
    return nums[left]
总结

在已排序的数组中找到最大元素非常简单,只需要直接返回数组的最后一个元素即可。对于旋转数组,我们可以使用二分查找来找到最大元素。这个问题可能看起来比较难,但是只要了解二分查找的基本原理,就能够比较容易地解决它。