📅  最后修改于: 2023-12-03 15:07:16.087000             🧑  作者: Mango
本文章介绍一个常见的问题:删除数组中给定的元素后,找到其中最大的元素。
本问题同样适用于链表,只需要稍加修改即可。
一种常见的解决方法是对数组进行排序,然后找到最后一个元素。但是排序的时间复杂度为O(nlogn),并不是最优解。
另一种解决方法是遍历一次数组,记录当前最大值和最后一个元素的位置,然后将删除元素后的最后一个元素和记录的位置交换,从而保证最大元素在删除元素后仍然位于最后一个位置。
代码:
def remove_and_find_max(nums: List[int], target: int) -> int:
max_val = float('-inf')
max_idx = -1
for i in range(len(nums)):
if nums[i] > max_val:
max_val = nums[i]
max_idx = i
if nums[i] == target:
nums[i], nums[-1] = nums[-1], nums[i]
nums.pop()
break
return max(nums[max_idx], nums[-1])
时间复杂度为O(n),因为只需要遍历一次数组。
空间复杂度为O(1),因为只需要使用常数个额外空间。
本文介绍了一个常见的问题:删除数组中给定元素后,找到其中最大的元素。我们提出了一种时间复杂度为O(n),空间复杂度为O(1)的解决方法,并给出了代码实现。
这种方法在实际工作中非常实用,可以用来解决一些需要在数组或链表中寻找最大值的问题。