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

【LetMeFly】2789.合并后数组中的最大元素:贪心(倒序)

力扣题目链接:https://leetcode.cn/problems/largest-element-in-an-array-after-merge-operations/

给你一个下标从 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

方法一:贪心(倒序)

相邻两个数,如果右边大于等于左边,则右边可以吃掉左边并化为己有。

那就从最右边往左开吃呗!若能吃,则吃之;若不能,则为之。(如果右边的数不小于左边,则右边的数吃掉左边的数;否则,右边的数成为左边的数。)

直到遍历到最左边为止。

Q&A

Q1:为什么要从右往左开吃?

A1:贪心。因为只有右边较大才能吃到左边,最终目标是总和尽可能大(也就是吃地尽可能多),因此要先大右边再大左边。例如2 2 3,若先“32”则变成2 5,最终变成7;若先“22”则变成4 3,无法继续。

Q2:为什么“若不能,则为之”?

A2:因为“不能”是因为“右边小于左边”,右边那个数“永无再吃之日”,并且其比左边那个数小,因此舍弃右边的数使用更大的左边的数继续。

时空复杂度

  • 时间复杂度 O ( l e n ( n u m s ) ) O(len(nums)) O(len(nums))
  • 空间复杂度 O ( 1 ) O(1) O(1)

AC代码

C++
typedef long long ll;
class Solution {
public:ll maxArrayValue(vector<int>& nums) {ll ans = nums.back();for (int i = nums.size() - 2; i >= 0; i--) {if (nums[i] <= ans) {ans += nums[i];}else {ans = nums[i];}}return ans;}
};
Python
from typing import Listclass Solution:def maxArrayValue(self, nums: List[int]) -> int:ans = nums[-1]for i in range(len(nums) - 2, -1, -1):if nums[i] <= ans:ans += nums[i]else:ans = nums[i]return ans

同步发文于CSDN和我的个人博客,原创不易,转载经作者同意后请附上原文链接哦~
Tisfy:https://letmefly.blog.csdn.net/article/details/136698122

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/743655.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

selenium启用MS Edge浏览器/下载MS Edge WebDriver

Selenium 是一个用于自动化 web 浏览器的工具&#xff0c;可以用于测试 web 应用程序或执行特定 web 任务。要在 Python 中使用 Selenium 来控制 Edge 浏览器&#xff0c;您需要安装相应的 Selenium 包和 Edge 驱动程序&#xff0c;并编写相应的 Python 代码。# 创建 selenium …

Prompt Engineering(提示工程)

Prompt 工程简介 在近年来&#xff0c;大模型&#xff08;Large Model&#xff09;如GPT、BERT等在自然语言处理领域取得了巨大的成功。这些模型通过海量数据的训练&#xff0c;具备了强大的语言理解和生成能力。然而&#xff0c;要想充分发挥这些大模型的潜力&#xff0c;仅仅…

【计算机视觉】目标跟踪| 光流算法详细介绍|附代码

0、前言 在上篇文章中https://blog.csdn.net/Yaoyao2024/article/details/136625461?spm1001.2014.3001.5501&#xff0c;我们对目标跟踪任务和目标跟踪算法有了大致的了解。今天我们就来详细介绍一下其中的生成式算法的一种&#xff1a;光流法。 在介绍光流法之前&#xff…

SinoDB V16.8 版本新特性

1、Oracle兼容 兼容 with as 语法 兼容 insert all/first 语法 兼容 () 形式的左外连接和右外连接语法 兼容 ROLLUP/CUBE/GROUPING SETS 语法 兼容 create or replace view/trigger/procedure/function/index 语法 兼容 rename procedure/function 语法 2、新增功能 条…

IMX8MM -- Yocto构建遇见的错误及解决方法:

IMX8MM Yocto构建遇见的错误及解决方法&#xff1a; 1 bison-3.0.4 error2 Opencv BB_NO_NETWORK Error &#xff1a;3 Yocto构建时出现U-boot 问题4 Yocto构建时出现Linux kernel编译问题5 wayland-native6 cross-localedef-native7 wayland-protocols8 mesa 硬件&#xff1a;…

《BERT基础教程:Transformer大模型实战》读书笔记

概念 BERT&#xff0c;Bidirectional Encoder Representations from Transformers&#xff0c;多Transformer的双向编码器表示法。 RNN&#xff0c;recurrent neural network&#xff0c;循环神经网络。 LSTM&#xff0c;long short-term memory&#xff0c;长短期记忆网络。…

python类中的def __next__(self):有什么用

在Python中&#xff0c;__next__ 方法是一个特殊方法&#xff0c;它用于实现迭代器协议。当一个对象定义了 __next__ 方法时&#xff0c;这个对象就变成了一个迭代器。迭代器允许你在一个序列&#xff08;比如列表、元组或集合&#xff09;或其他可迭代对象上进行迭代&#xff…

Linux网络配置修改hosts映射文件关闭防火墙

Linux网络配置&系统管理 一、物理机、VMware软件、虚拟机之间的网络关系1.1 总体框架图1.2 为什么物理机、VM软件、客户机之间能够通信?1.3 查看客户机的IP地址ifconfig1.4 小节1.5 修改静态IP地址1.6 测试能不能ping通 二、修改主机名以及hosts映射文件2.1 修改主机名2.1…

机器视觉学习(二)—— 显示图像和视频

一、获取图像 要使用OpenCV获取图像&#xff0c;你需要安装OpenCV库并学习基本的OpenCV函数。下面是一些获取图像的基本步骤&#xff1a; 导入必要的库&#xff1a;import cv2 读取图像&#xff1a;image cv2.imread("image.jpg") 这将从指定路径读取图像&#xf…

什么是事件冒泡?Littlevgl中的事件冒泡是怎么样的?

什么是事件冒泡?Littlevgl中的事件冒泡是怎么样的&#xff1f; 事件冒泡(Event Bubbling)是指当一个元素上的事件被触发时&#xff0c;该事件会从最底层的元素开始逐级向上传播&#xff0c;直到最顶层的元素(通常是文档对象)被触发。 ​ 例如我们点击一个按钮时&#xff0c;…

前后端分离项目环境搭建

1. 使用到的技术和工具 springboot vue项目的搭建 工具 idea&#xff0c;mavennodejs 2. 后端框架搭建 利用maven创建springboot项目 3. 前端项目搭建 1. 安装相关工具 nodejs&#xff1a; 一个开源、跨平台的 JavaScript 运行时环境&#xff0c;可以理解成java当中需要…

fly-gesture-unlock 手势解锁库

最近要实现前端九宫格手势解锁功能&#xff0c;到 github 和 gitee 上没有找到质量比较好的库&#xff0c;自己对这个功能也是蛮感兴趣的&#xff0c;所以做了这个开源库&#xff0c;用于实现手势解锁功能&#xff0c;可以帮助大家快速完成业务逻辑&#xff0c;提供了完整的 DE…

Prompt提示工程上手指南:基础原理及实践(二)-Prompt主流策略

前言 上篇文章将Prompt提示工程大体概念和具体工作流程阐述清楚了&#xff0c;我们知道Prompt工程是指人们向生成性人工智能&#xff08;AI&#xff09;服务输入提示以生成文本或图像的过程中&#xff0c;对这些提示进行精炼的过程。生成人工智能是一个根据人类和机器产生的数…

python基于flask考研学习交流系统30vy7附源码django

考研在线学习与交流平台根据实际情况分为前后台两部分&#xff0c;前台部分主要是让用户使用的&#xff0c;包括用户的注册登录&#xff0c;首页&#xff0c;课程信息&#xff0c;在线讨论&#xff0c;系统公告&#xff0c;后台管理&#xff0c;个人中心等功能&#xff1b;后台…

Redis 中的全局命令

查看所有键 keys * keys命令会遍历所有键&#xff0c; 所以它的时间复杂度是O&#xff08;n&#xff09; 查看键总数 dbsize dbsize命令在计算键总数时不会遍历所有键&#xff0c; 而是直接获取Redis内置的键总数变量&#xff0c; 所以dbsize命令的时间复杂度是O&#xff…

Mysql锁与MVCC

文章目录 Mysql锁的类型锁使用MVCC快照读和当前读读视图【Read View】串行化的解决 exlpain字段解析ACID的原理日志引擎整合SpringBoot博客记录 Mysql锁的类型 MySQL中有哪些锁&#xff1a; 乐观锁&#xff08;Optimistic Locking&#xff09;&#xff1a;假设并发操作时不会发…

CODE001

GPIO通用输入输出端口 1.可以配置八种输入输出模式 2.引脚电平0~3.3v 部分可以容忍5V 3.输出模式下可控制端口输出高低电平&#xff0c;用来驱动LED&#xff0c;蜂鸣器&#xff0c;模拟通信协议输出时序 4.输入模式下可读取端口的高低电平或电压&#xff0c;用于读取按键输入&a…

3.Python从入门到精通—Python 基础语法详细讲解-中

【30天】Python从入门到精通详解版—第二天—Python 基础语法详细讲解-中 控制流程语句条件语句循环语句 函数和模块函数模块 控制流程语句 在Python中&#xff0c;控制流程语句用于控制程序的执行流程&#xff0c;包括条件语句和循环语句。 条件语句 Python中的条件语句包括…

Database Connectivity using Python使用 Python 进行数据库连接

Introduction • The Python programming language has powerful features for database programming • Python supports various databases like MySQL, Oracle, Sybase, PostgreSQL, etc • Python also supports Data Definition Language (DDL), Data Manipulation Langua…

ARMV8-aarch64的虚拟内存(mmutlbcache)介绍-概念扫盲

&#x1f525;博客主页&#xff1a; 小羊失眠啦. &#x1f3a5;系列专栏&#xff1a;《C语言》 《数据结构》 《C》 《Linux》 《Cpolar》 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 思考: 1、cache的entry里都是有什么&#xff1f; 2、TLB的entry里都是有什么? 3、MMU操作…