📅  最后修改于: 2023-12-03 14:55:20.610000             🧑  作者: Mango
在程序开发中,我们经常需要从一个数组中删除最小值或者最大值。但是,有时候我们需要删除数组中的最小值和最大值,这个时候,我们该怎么做呢?本文将会介绍如何最小化任一端的删除以从数组中删除最小值和最大值。
排序是一种最简单的方式,可以让我们找到最小值和最大值,然后将其从数组中删除。但是,由于排序的复杂度为O(nlogn),所以不建议在大规模数据中使用。
numbers = [5, 2, 8, 1, 9]
numbers.sort()
minimum = numbers.pop(0)
maximum = numbers.pop()
遍历数组以查找最小值和最大值,然后将其从数组中删除。这个方法的复杂度为O(n),适合在大规模数据中使用。但是,请注意,如果数组中的最小值和最大值在同一个位置上,那么该方法就不适用了。
numbers = [5, 2, 8, 1, 9]
minimum = float('inf')
maximum = float('-inf')
minimum_index = 0
maximum_index = 0
for index, number in enumerate(numbers):
if number < minimum:
minimum = number
minimum_index = index
if number > maximum:
maximum = number
maximum_index = index
numbers.pop(min(minimum_index, maximum_index))
numbers.pop(max(minimum_index, maximum_index) - 1)
双指针法是一种更高效的方法,可以解决排序方法的缺点。该方法的复杂度为O(n)。
numbers = [5, 2, 8, 1, 9]
left = 0
right = len(numbers) - 1
minimum = float('inf')
maximum = float('-inf')
while left <= right:
if numbers[left] < minimum:
minimum = numbers[left]
minimum_index = left
if numbers[right] > maximum:
maximum = numbers[right]
maximum_index = right
left += 1
right -= 1
numbers.pop(min(minimum_index, maximum_index))
numbers.pop(max(minimum_index, maximum_index) - 1)
最后,总结一下,方法一适用于小规模数据,方法二适用于大规模数据,但是容易出错,方法三是最高效的方法。