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

news/2024/7/8 4:53:10

题目链接

Leetcode.2789 合并后数组中的最大元素 rating : 1485

题目描述

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

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

  • 选中一个同时满足 0 ≤ i < n u m s . l e n g t h − 1 0 \leq i < nums.length - 1 0i<nums.length1 n u m s [ i ] ≤ n u m s [ i + 1 ] nums[i] \leq nums[i + 1] nums[i]nums[i+1] 的整数 i i i。将元素 n u m s [ i + 1 ] nums[i + 1] nums[i+1] 替换为 n u m s [ i ] + n u m s [ i + 1 ] nums[i] + nums[i + 1] nums[i]+nums[i+1] ,并从数组中删除元素 n u m s [ i ] nums[i] 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 ≤ n u m s . l e n g t h ≤ 1 0 5 1 \leq nums.length \leq 10^5 1nums.length105
  • 1 ≤ n u m s [ i ] ≤ 1 0 6 1 \leq nums[i] \leq 10^6 1nums[i]106

解法:贪心

我们用 s s s 表示每一段能够合并的元素之和, s s s 初始为 n u m s [ n − 1 ] nums[n-1] nums[n1]

我们用 a n s ans ans 表示最大的元素值, a n s ans ans 初始为 n u m s [ n − 1 ] nums[n-1] nums[n1]

我们从逆序开始遍历 n u m s [ i ] ( 0 ≤ i ≤ n − 2 ) nums[i] \quad (0 \leq i \leq n - 2) nums[i](0in2)

  • 如果 s ≥ n u m s [ i ] s \geq nums[i] snums[i],说明 s s s 可以和 n u m s [ i ] nums[i] nums[i] 合并, s s s 合并之后的值为 s + n u m s [ i ] s + nums[i] s+nums[i]
  • 否则,说明 s s s 不可以和 n u m s [ i ] nums[i] nums[i] 合并,那么 s s s 就要以 n u m s [ i ] nums[i] nums[i] 开始合并,也就是 s = n u m s [ i ] s = nums[i] s=nums[i]

在遍历的过程中, a n s ans ans 取最大的 s u m sum sum,也就是最大的元素。

时间复杂度: O ( n ) O(n) O(n)

C++代码:

using LL = long long;

class Solution {
public:
    long long maxArrayValue(vector<int>& nums) {
        int n = nums.size();
        LL ans = nums[n - 1] , s = nums[n - 1];

        for(int i = n - 2;i >= 0;i--){
            if(s >= nums[i]) s += nums[i];
            else s = nums[i];

            ans = max(ans , s);
        }

        return ans;
    }
};


http://lihuaxi.xjx100.cn/news/1436047.html

相关文章

SAP AIF-Application Interface Framework基本介绍

AIF-Application Interface Framework基本介绍 SAP AIF-应用程序接口框架特性&#xff1a; 通知业务用户出错的自动警报&#xff1b; 用户友好的事务&#xff0c;用于界面监控、错误处理和直接从应用系统内纠正错误&#xff1b; SAP GUI 和基于 Web 的用户界面&#xff1b; 使…

flutter开发实战-MethodChannel实现flutter与iOS双向通信

flutter开发实战-MethodChannel实现flutter与iOS双向通信 最近开发中需要iOS与flutter实现通信&#xff0c;这里使用的MethodChannel 如果需要flutter与Android实现双向通信&#xff0c;请看 https://blog.csdn.net/gloryFlow/article/details/132218837 这部分与https://bl…

CANdelaStudio 使用介绍

CANdela Studio使用_哔哩哔哩_bilibili 一.CANdelaStudio使用tips 1.开始菜单打开软件&#xff0c;避免软件字体是德文的 2.打开软件之后&#xff0c;用“Open”打开.cdd或者.cddt文件&#xff0c;不要双击文件打开&#xff0c;这样容易报错 3.查看软件版本信息 4.只有Admin版…

由于找不到msvcp100.dll无法继续执行代码怎么解决

当遇到程序无法正常运行&#xff0c;提示缺少msvcp100.dll文件时&#xff0c;最初的反应可能是困惑和不知所措。然而&#xff0c;通过修复msvcp100.dll文件&#xff0c;我发现这个问题实际上并不复杂&#xff0c;并且可以通过一些简单的步骤解决。 在修复msvcp100.dll文件的时候…

【Wamp】安装 | 局域网内设备访问

安装教程&#xff1a; https://wampserver.site/article/1.html 下载 https://www.wampserver.com/en/ 安装路径上不能有中文 安装好之后图标呈绿色 放入网页文件 将网页文件放置于wamp文件夹的www子文件夹 例如&#xff1a;\Wamp\program\www 修改http端口 WAMP服务器…

【Git】—— 标签管理

目录 &#xff08;一&#xff09;理解标签 1、作用 &#xff08;二&#xff09;创建标签 &#xff08;三&#xff09;操作标签 1、删除标签 2、推送标签 3、删除远程标签 &#xff08;一&#xff09;理解标签 标签 tag &#xff0c;可以简单的理解为是对某次 commit 的…

多用户一体化建设跨境电商小程序、app开发

跨境电商是指通过互联网技术&#xff0c;进行国际贸易的电子商务活动。随着跨境电商的快速发展&#xff0c;许多企业开始关注开发跨境电商小程序和app&#xff0c;以扩大其国际业务。下面是多用户一体化建设跨境电商小程序和app的开发步骤。 第一步&#xff1a;需求分析和规划…

八、复用(3)

本章概要 final 关键字 final 数据空白 finalfinal 参数final 方法final 和 privatefinal 类final 忠告 类初始化和加载 继承和初始化 final关键字 根据上下文环境&#xff0c;Java 的关键字 final 的含义有些微的不同&#xff0c;但通常它指的是“这是不能被改变的”。防止…