LeetCode:2789. 合并后数组中的最大元素(贪心 Java)

目录

[2789. 合并后数组中的最大元素](#2789. 合并后数组中的最大元素)

题目描述:

实现代码与解析:

贪心

原理思路:


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

题目描述:

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

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

  • 选中一个同时满足 0 <= i < nums.length - 1nums[i] <= nums[i + 1] 的整数 i 。将元素 nums[i + 1] 替换为 nums[i] + nums[i + 1] ,并从数组中删除元素 nums[i]

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

示例 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 。

提示:

  • 1 <= nums.length <= 105
  • 1 <= nums[i] <= 106

实现代码与解析:

贪心

java 复制代码
class Solution {
    public long maxArrayValue(int[] nums) {
        
        long res = 0;
        long  cur = 0;

        int n = nums.length;

        for (int i = n - 1; i >= 0; i--) {
            if (cur < nums[i]) {
                res = nums[i];
                cur = 0; // 重新开始计算
            }
            cur += nums[i];
        }

        return Math.max(res, cur);
    }
}

原理思路:

因为数组总和是不变的,想要获得最大值,那么就要尽可能的合并,条件中说右侧数大于左侧才能合并,那么我们就从后向前遍历,让右侧优先合并变大才能向前继续合并找到最大值。

如果遍历时,不能再合并,立即更新res为nums[i],因为如果不能合并,说明左侧的单个数已经大于右侧合并的数,那么必然右侧不是最大值,重新开始计算即可。

最后要把cur和res取一个最大值,进行最后的比较。

相关推荐
Otaku love travel41 分钟前
老系统改造增加初始化,自动化数据源配置(tomcat+jsp+springmvc)
java·tomcat·初始化·动态数据源
DKPT1 小时前
Java设计模式之行为型模式(责任链模式)介绍与说明
java·笔记·学习·观察者模式·设计模式
L_autinue_Star1 小时前
手写vector容器:C++模板实战指南(从0到1掌握泛型编程)
java·c语言·开发语言·c++·学习·stl
晨岳1 小时前
CentOS 安装 JDK+ NGINX+ Tomcat + Redis + MySQL搭建项目环境
java·redis·mysql·nginx·centos·tomcat
执笔诉情殇〆1 小时前
前后端分离(java) 和 Nginx在服务器上的完整部署方案(redis、minio)
java·服务器·redis·nginx·minio
YuTaoShao2 小时前
【LeetCode 热题 100】24. 两两交换链表中的节点——(解法一)迭代+哨兵
java·算法·leetcode·链表
程序员的世界你不懂2 小时前
(20)Java+Playwright自动化测试- 操作鼠标拖拽 - 上篇
java·python·计算机外设
AI360labs_atyun2 小时前
Java在AI时代的演进与应用:一个务实的视角
java·开发语言·人工智能·科技·学习·ai
前端拿破轮3 小时前
翻转字符串里的单词,难点不是翻转,而是正则表达式?💩💩💩
算法·leetcode·面试
凤年徐3 小时前
【数据结构与算法】203.移除链表元素(LeetCode)图文详解
c语言·开发语言·数据结构·算法·leetcode·链表·刷题