📌  相关文章
📜  删除给定元素后找到最大的(1)

📅  最后修改于: 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)的解决方法,并给出了代码实现。

这种方法在实际工作中非常实用,可以用来解决一些需要在数组或链表中寻找最大值的问题。