返回

立足力扣:极致解析生成数组的最大值

前端

作为一名资深的程序员,每天解决一个力扣问题已成为一种习惯。今天,我们聚焦于第 1646 题:“获取生成数组中的最大值”。这道题乍一看似乎很简单,但它却隐藏着一些巧妙的细节。让我们一起深入剖析这道题,并找出它的最佳解决方案。

首先,我们先了解一下题目的具体要求:

给定一个由不同正整数构成的数组 nums ,请您返回一个长度为 nums.length 的数组 answer ,其中 answer[i] 是由数组 nums 中除 nums[i] 之外其余各元素按升序排列后得到的最大值。

为了帮助您更好地理解问题,我们提供了一些示例:

示例 1:

输入:nums = [3,4,2,3]
输出:[4,4,4,4]
解释:最大值分别为 4、4、4、4

示例 2:

输入:nums = [1,2,3,4]
输出:[3,3,3,3]
解释:最大值分别为 3、3、3、3

示例 3:

输入:nums = [1]
输出:[0]
解释:nums 中只有一个元素,最大值为 0 。

通过这些示例,我们可以发现一个规律:数组 answer 中的每个元素 answer[i],都是由数组 nums 中除了 nums[i] 之外的所有元素按升序排列后得到的最大值。

现在,让我们来分析一下这道题的本质。这道题的核心在于如何快速地找到数组 nums 中除了 nums[i] 之外的所有元素按升序排列后的最大值。

针对这个问题,我们可以采用两种方案来解决:

方案一:

  1. 将数组 nums 拷贝一份到数组 sortedNums。
  2. 对 sortedNums 进行升序排序。
  3. 遍历数组 nums,对于每个元素 nums[i],从 sortedNums 中找到除了 nums[i] 之外的最大值,并将其赋给 answer[i]。

方案二:

  1. 将数组 nums 拷贝一份到数组 sortedNums。
  2. 对 sortedNums 进行升序排序。
  3. 遍历数组 nums,对于每个元素 nums[i],在 sortedNums 中找到比 nums[i] 大的第一个元素,并将其赋给 answer[i]。如果不存在比 nums[i] 大的元素,则将 sortedNums 中最后一个元素赋给 answer[i]。

这两种方案的时间复杂度都是 O(n log n),其中 n 为数组 nums 的长度。

最后,我们总结一下这道题的解题思路:

  1. 将数组 nums 拷贝一份到数组 sortedNums。
  2. 对 sortedNums 进行升序排序。
  3. 遍历数组 nums,对于每个元素 nums[i],根据具体方案,从 sortedNums 中找到除了 nums[i] 之外的最大值,并将其赋给 answer[i]。

希望本文对您理解这道题有所帮助。如果您还有任何疑问,请随时提出。