列表

详情


6915. 合并后数组中的最大元素

给你一个下标从 0 开始、由正整数组成的数组 nums

你可以在数组上执行下述操作 任意 次:

返回你可以从最终数组中获得的 最大 元素的值。

 

示例 1:

输入:nums = [2,3,7,9,3]
输出:21
解释:我们可以在数组上执行下述操作:
- 选中 i = 0 ,得到数组 nums = [5,7,9,3] 。
- 选中 i = 1 ,得到数组 nums = [5,16,3] 。
- 选中 i = 0 ,得到数组 nums = [21,3] 。
最终数组中的最大元素是 21 。可以证明我们无法获得更大的元素。

示例 2:

输入:nums = [5,3,3]
输出:11
解释:我们可以在数组上执行下述操作:
- 选中 i = 1 ,得到数组 nums = [5,6] 。
- 选中 i = 0 ,得到数组 nums = [11] 。
最终数组中只有一个元素,即 11 。

 

提示:

原站题解

去查看

上次编辑到这里,代码来自缓存 点击恢复默认模板
class Solution { public: long long maxArrayValue(vector<int>& nums) { } };

php 解法, 执行用时: 259 ms, 内存消耗: 27.2 MB, 提交时间: 2024-03-14 10:07:39

class Solution {

    /**
     * @param Integer[] $nums
     * @return Integer
     */
    function maxArrayValue($nums) {
        $n = count($nums) - 1;
        
        while ($n >= 0) {
            while ($n > 0 && $nums[$n - 1] <= $nums[$n]) {
                $nums[$n - 1] += $nums[$n];
                $n--;
            }
            $n--;
        }
        
        return $nums[0];
    }
}

javascript 解法, 执行用时: 112 ms, 内存消耗: 52.3 MB, 提交时间: 2023-07-24 10:01:43

/**
 * @param {number[]} nums
 * @return {number}
 */
var maxArrayValue = function(nums) {
    let max = nums.pop();
    while (nums.length) {
        const pop = nums.pop();
        max = max >= pop ? max + pop : pop;
    }
    return max;
};

python3 解法, 执行用时: 204 ms, 内存消耗: 27 MB, 提交时间: 2023-07-24 10:00:40

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 + 1] += nums[i]
                nums.pop(i)
        return max(nums)

python3 解法, 执行用时: 180 ms, 内存消耗: 31.8 MB, 提交时间: 2023-07-24 10:00:25

class Solution:
    def maxArrayValue(self, nums: List[int]) -> int:
        n = len(nums) - 1
        while n >= 0:
            while n > 0 and nums[n - 1] <= nums[n]:
                nums[n - 1] += nums[n]
                n -= 1
            n -= 1

        return nums[0]

golang 解法, 执行用时: 136 ms, 内存消耗: 9.1 MB, 提交时间: 2023-07-24 09:58:09

func maxArrayValue(nums []int) int64 {
    n := len(nums)
    ans, res := nums[n-1], nums[n-1]
    for i := n-2; i >= 0; i-- {
        if nums[i] <= res {
            res += nums[i]
        } else {
            res = nums[i]
        }
        if res > ans {
            ans = res
        }
    }
    return int64(ans)
}

cpp 解法, 执行用时: 116 ms, 内存消耗: 102.9 MB, 提交时间: 2023-07-24 09:55:37

class Solution {
public:
    long long maxArrayValue(vector<int>& nums) {
        int n = nums.size();
        long long ans = nums[n - 1];
        long long sum = nums[n - 1];
        /* 从后往前模拟即可 */
        for (int i = n - 2; i >= 0; i--) {
            if (nums[i] <= sum) {
                sum += nums[i];
            } else {
                sum = nums[i];
            }
            ans = max(ans, sum);
        }
        return ans;      
    }
};

java 解法, 执行用时: 1 ms, 内存消耗: 56.8 MB, 提交时间: 2023-07-24 09:55:16

/**
 * 从后往前遍历数组,设置一个迭代变量res,如果res>=nums[i], 
 * 则迭代变量res+=nums[i],否则res=nums[i],在遍历过程中更新ans
 **/
class Solution {
    public long maxArrayValue(int[] nums) {
        int len = nums.length;
        long max = nums[len -1];
        for (int i = len - 2; i >= 0; i--) max = (max >= nums[i] ? max + nums[i] : nums[i]);
        return max;
    }
}

java 解法, 执行用时: 1 ms, 内存消耗: 56.6 MB, 提交时间: 2023-07-24 09:53:58

/**
 * 从后往前遍历数组,设置一个迭代变量res,如果res>=nums[i], 
 * 则迭代变量res+=nums[i],否则res=nums[i],在遍历过程中更新ans
 **/
class Solution {
    public long maxArrayValue(int[] nums) {
        int n = nums.length;
        long ans = nums[n-1];
        long res = nums[n-1];  // 迭代变量从最后一个数开始
        for (int i = n-2; i >= 0; i-- ) {
            if (res >= nums[i]) {
                res += nums[i];
            } else {
                res = nums[i];
            }
            ans = Math.max(ans, res);
        }
        return ans;
    }
}

上一题