Welcome to Subscribe On Youtube
2789. Largest Element in an Array after Merge Operations
Description
You are given a 0-indexed array nums
consisting of positive integers.
You can do the following operation on the array any number of times:
- Choose an integer
i
such that0 <= i < nums.length - 1
andnums[i] <= nums[i + 1]
. Replace the elementnums[i + 1]
withnums[i] + nums[i + 1]
and delete the elementnums[i]
from the array.
Return the value of the largest element that you can possibly obtain in the final array.
Example 1:
Input: nums = [2,3,7,9,3] Output: 21 Explanation: We can apply the following operations on the array: - Choose i = 0. The resulting array will be nums = [5,7,9,3]. - Choose i = 1. The resulting array will be nums = [5,16,3]. - Choose i = 0. The resulting array will be nums = [21,3]. The largest element in the final array is 21. It can be shown that we cannot obtain a larger element.
Example 2:
Input: nums = [5,3,3] Output: 11 Explanation: We can do the following operations on the array: - Choose i = 1. The resulting array will be nums = [5,6]. - Choose i = 0. The resulting array will be nums = [11]. There is only one element in the final array, which is 11.
Constraints:
1 <= nums.length <= 105
1 <= nums[i] <= 106
Solutions
-
class Solution { public long maxArrayValue(int[] nums) { int n = nums.length; long ans = nums[n - 1], t = nums[n - 1]; for (int i = n - 2; i >= 0; --i) { if (nums[i] <= t) { t += nums[i]; } else { t = nums[i]; } ans = Math.max(ans, t); } return ans; } }
-
class Solution { public: long long maxArrayValue(vector<int>& nums) { int n = nums.size(); long long ans = nums[n - 1], t = nums[n - 1]; for (int i = n - 2; ~i; --i) { if (nums[i] <= t) { t += nums[i]; } else { t = nums[i]; } ans = max(ans, t); } return ans; } };
-
class Solution: def maxArrayValue(self, nums: List[int]) -> int: for i in range(len(nums) - 2, -1, -1): if nums[i] <= nums[i + 1]: nums[i] += nums[i + 1] return max(nums)
-
func maxArrayValue(nums []int) int64 { n := len(nums) ans, t := nums[n-1], nums[n-1] for i := n - 2; i >= 0; i-- { if nums[i] <= t { t += nums[i] } else { t = nums[i] } ans = max(ans, t) } return int64(ans) } func max(a, b int) int { if a > b { return a } return b }
-
function maxArrayValue(nums: number[]): number { for (let i = nums.length - 2; i >= 0; --i) { if (nums[i] <= nums[i + 1]) { nums[i] += nums[i + 1]; } } return Math.max(...nums); }