文章目录
- 1. 题目来源
- 2. 题目解析
1. 题目来源
链接:2789. 合并后数组中的最大元素
2. 题目解析
挺有意思的一道题目。
这里的两数字合并,实际上就是两个数字之和变成了新的数字,再用这个数字和将这两个数字在数组中进行替代。
将这两个数字记为 A1,A2,要求 A1 <= A2,那么合并的时候就最好不要从前向后合并了,就要考虑逆序的从后向前合并,保证 A2 是数字和累加起来的,尽可能的大过 A1,将 A1 能够顺利合并,保证和最大。
当逆序合并不了的时候,即,A1 > A2 的时候,这个时候数组中的最大和已经不是 A2 这块了,也无法做合并了。我们就将当前的最大和赋值给 A1,然后让 A1 继续去做逆序合并即可。
最终合并到头部,逆序遍历完数组,则可得到数组中的最大值。
可能会爆 long long,记得开。
- 时间复杂度: O ( n ) O(n) O(n)
- 空间复杂度: O ( 1 ) O(1) O(1)
class Solution {
public:long long maxArrayValue(vector<int>& nums) {long long sum = nums.back();for (int i = nums.size() - 2; i >= 0; i--) {sum = nums[i] <= sum ? nums[i] + sum : nums[i];}return sum;}
};