📅  最后修改于: 2023-12-03 15:25:55.678000             🧑  作者: Mango
在数组中找出最大元素是编程中最基本的问题之一,但是当数组进行排序和旋转后,这个问题会变得更加困难。在这里,我们将介绍如何在排序和旋转数组中找出最大元素。
如果数组是已经排序过的,那么最大元素就是数组的最后一个元素。这个问题非常简单,只需要返回数组的最后一个元素即可。
def find_max_sorted_array(nums):
return nums[-1]
如果数组被旋转了,那么最大元素就不再是数组的最后一个元素,而是数组中的某个元素。我们可以使用二分查找来解决这个问题。具体步骤如下:
left = 0
和 right = len(nums)-1
。left < right
时进行循环。mid = (left + right) // 2
。nums[mid] < nums[right]
,说明最大元素在 mid
的左边,将右指针移动到 mid
。nums[mid] > nums[right]
,说明最大元素在 mid
的右边,将左指针移动到 mid+1
。nums[mid] == nums[right]
,需要将右指针减一,因为 nums[right]
肯定不是最大元素。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]
在已排序的数组中找到最大元素非常简单,只需要直接返回数组的最后一个元素即可。对于旋转数组,我们可以使用二分查找来找到最大元素。这个问题可能看起来比较难,但是只要了解二分查找的基本原理,就能够比较容易地解决它。