求解LeetCode题库第2789题 合并后数组中的最大元素

2024-03-11 13:52

本文主要是介绍求解LeetCode题库第2789题 合并后数组中的最大元素,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

难度:中等

问题描述:

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

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

选中一个同时满足 0 <= i < nums.length - 1 和 nums[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 。

分析:

问题并不复杂,试过之后,才知道在寻找“同时满足 0 <= i < nums.length - 1 和 nums[i] <= nums[i + 1] ”的整数 i 时,如果从nums的左边向右寻找时,就会漏掉一部分处理元素,使得最后从nums中得不到的真正的最大整数,无法完成问题的求解,正确的做法是从nums的右端向左端开始寻找。

程序设计了一个函数hbone(nums),从nums的右端向左端寻找,如果找到满足条件的整数i,返回可以继续处理的标志Fasle和处理之后的nums,否则返回不能继续处理的标志True和没有处理的nums。

程序如下:

#在nums中从最右边向左查找
def hbone(nums):n=len(nums)temp=[]for i in range(1,n):if nums[-i]>=nums[-(i+1)]:temp.append(i)breakif temp==[]:return True,numselse:i=temp[0]nums[-i]=nums[-i]+nums[-(i+1)]del nums[-(i+1)]return False,numsnums=eval(input('nums='))
while True:a,b=hbone(nums)print(a,b)nums=b[:]if a:print(max(b))break

运行实例1

nums=[3,4,7,6,8,1,2]

False [3, 4, 7, 6, 8, 3]

False [3, 4, 7, 14, 3]

False [3, 4, 21, 3]

False [3, 25, 3]

False [28, 3]

True [28, 3]

28

运行实例2

nums=[2,3,7,9,3]

False [2, 3, 16, 3]

False [2, 19, 3]

False [21, 3]

True [21, 3]

21

运行实例3

nums=[5,3,2]

True [5, 3, 2]

5

感悟:

每一个问题都有出题者考查的点,不以题的难易确定题目的好坏,坚持必有进益。

这篇关于求解LeetCode题库第2789题 合并后数组中的最大元素的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/797981

相关文章

使用C++实现链表元素的反转

《使用C++实现链表元素的反转》反转链表是链表操作中一个经典的问题,也是面试中常见的考题,本文将从思路到实现一步步地讲解如何实现链表的反转,帮助初学者理解这一操作,我们将使用C++代码演示具体实现,同... 目录问题定义思路分析代码实现带头节点的链表代码讲解其他实现方式时间和空间复杂度分析总结问题定义给定

C++初始化数组的几种常见方法(简单易懂)

《C++初始化数组的几种常见方法(简单易懂)》本文介绍了C++中数组的初始化方法,包括一维数组和二维数组的初始化,以及用new动态初始化数组,在C++11及以上版本中,还提供了使用std::array... 目录1、初始化一维数组1.1、使用列表初始化(推荐方式)1.2、初始化部分列表1.3、使用std::

C++ Primer 多维数组的使用

《C++Primer多维数组的使用》本文主要介绍了多维数组在C++语言中的定义、初始化、下标引用以及使用范围for语句处理多维数组的方法,具有一定的参考价值,感兴趣的可以了解一下... 目录多维数组多维数组的初始化多维数组的下标引用使用范围for语句处理多维数组指针和多维数组多维数组严格来说,C++语言没

CSS3中使用flex和grid实现等高元素布局的示例代码

《CSS3中使用flex和grid实现等高元素布局的示例代码》:本文主要介绍了使用CSS3中的Flexbox和Grid布局实现等高元素布局的方法,通过简单的两列实现、每行放置3列以及全部代码的展示,展示了这两种布局方式的实现细节和效果,详细内容请阅读本文,希望能对你有所帮助... 过往的实现方法是使用浮动加

使用Python合并 Excel单元格指定行列或单元格范围

《使用Python合并Excel单元格指定行列或单元格范围》合并Excel单元格是Excel数据处理和表格设计中的一项常用操作,本文将介绍如何通过Python合并Excel中的指定行列或单... 目录python Excel库安装Python合并Excel 中的指定行Python合并Excel 中的指定列P

Java 字符数组转字符串的常用方法

《Java字符数组转字符串的常用方法》文章总结了在Java中将字符数组转换为字符串的几种常用方法,包括使用String构造函数、String.valueOf()方法、StringBuilder以及A... 目录1. 使用String构造函数1.1 基本转换方法1.2 注意事项2. 使用String.valu

在MyBatis的XML映射文件中<trim>元素所有场景下的完整使用示例代码

《在MyBatis的XML映射文件中<trim>元素所有场景下的完整使用示例代码》在MyBatis的XML映射文件中,trim元素用于动态添加SQL语句的一部分,处理前缀、后缀及多余的逗号或连接符,示... 在MyBATis的XML映射文件中,<trim>元素用于动态地添加SQL语句的一部分,例如SET或W

numpy求解线性代数相关问题

《numpy求解线性代数相关问题》本文主要介绍了numpy求解线性代数相关问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 在numpy中有numpy.array类型和numpy.mat类型,前者是数组类型,后者是矩阵类型。数组

基于C#实现PDF文件合并工具

《基于C#实现PDF文件合并工具》这篇文章主要为大家详细介绍了如何基于C#实现一个简单的PDF文件合并工具,文中的示例代码简洁易懂,有需要的小伙伴可以跟随小编一起学习一下... 界面主要用于发票PDF文件的合并。经常出差要报销的很有用。代码using System;using System.Col

Python视频剪辑合并操作的实现示例

《Python视频剪辑合并操作的实现示例》很多人在创作视频时都需要进行剪辑,本文主要介绍了Python视频剪辑合并操作的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习... 目录介绍安装FFmpegWindowsMACOS安装MoviePy剪切视频合并视频转换视频结论介绍