首页 > 其他分享 >leetcode: 2789. 合并数组中的最大元素

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

时间:2024-03-14 13:13:02浏览次数:15  
标签:下标 nums sum 元素 2789 吞噬 数组 leetcode

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

题目的意思是数组中的元素可以吞噬前面一个不大于自身的元素,当所有元素都无法吞噬时,返回数组中可以获得的元素的最大值.要想获得保留元素的最大值,理应最后数组内剩余的元素应尽量的少, 也就是尽量让所有元素都被吞噬, 那我们就不能从前往后遍历进行吞噬了,因为这样会导致当前元素本来可以被吞噬,但是因为吞噬了前方元素使得自身又不能被吞噬了,这样中最终数组中的保留元素有可能变多,使得答案不正确,

例如nums = [1,1,1].

本来应该是下标2吞噬下标1,在吞噬下标0,这样得的结果是[3]

但如果下标1先吞噬下标0,那么nums = [2,1],导致最终的结果不正确.

所以我们应该从后向前遍历进行吞噬,这样可以保证吞噬的元素最多,使得保留元素最少,遍历过程中不断更新当前吞噬元素sum,如果遇到无法吞噬元素, 则更新ans的最大值,sum更新为0.

最终实现代码如下:

 1 class Solution {
 2     public long maxArrayValue(int[] nums) {
 3         long ans = -1, sum = 0;
 4         for (int i = nums.length - 1; i > -1 ; i--) {
 5             if (sum < nums[i]) {
 6                 ans = Math.max(ans, sum);
 7                 sum = 0;
 8             }
 9             sum += nums[i];
10         }
11         return Math.max(ans, sum);
12     }
13 }

 

标签:下标,nums,sum,元素,2789,吞噬,数组,leetcode
From: https://www.cnblogs.com/gx-tom/p/18072619

相关文章

  • 【ArcPy】矢量数据与Numpy数组互转
    代码importarcpyinputshp=r"C:\Users\admin\Desktop\excelfile\0.shp"outputshp=r"C:\Users\admin\Desktop\excelfile\copy02.shp"spatial_ref=arcpy.Describe(inputshp).spatialReferencearr=arcpy.da.FeatureClassToNumPyArray(in......
  • js判断数组是否包含某个字符串
    方法1Array.includes(): 这个方法返回一个布尔值,表示数组中是否包含指定的元素letlist=['a','ab','abc','d'];console.log(list.includes('abc'))//true方法2Array.indexOf():这个方法返回指定元素在数组中的第一个匹配位置的索引,如果找不到则返回-1。letlist=......
  • leetcode 24.两两交换链表中的节点
    24.两两交换链表中的节点给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。示例1:输入:head=[1,2,3,4]输出:[2,1,4,3]示例2:输入:head=[]输出:[]示例3:输入:head=[1]输出:[1]提......
  • 利用规约算法实现求解数组元素最大值
    规约算法原理可参照上一篇关于规约算法求解数组和的博客,此处不再详细介绍,直接给出代码实现过程及注释。#include<stdio.h>#include<stdlib.h>#defineN1000//数组大小__global__voidfindMax(int*array,int*maxValue,int*maxIndex){__shared__ints_ma......
  • 在GPU上利用规约算法完成对数组元素累加的并行计算
    目录序言规约算法介绍GPU代码实现规约算法序言并行规约是一种适用于GPU平台的并行算法,主要提高求和、最值、均值、逻辑与和逻辑或等一类运算的并行度。若使用CPU计算,需要串行遍历所有元素得到上述运算的结果,但在GPU平台可以使用规约操作并行实现上述运算。规约算法介......
  • 88. 合并两个有序数组c
    还有什么比刷简单题更爽的。intcmp(constvoid*a,constvoid*b){return*(int*)a-*(int*)b;}voidmerge(int*nums1,intnums1Size,intm,int*nums2,intnums2Size,intn){for(inti=m;i<nums1Size;i++){nums1[i]=nums2[i-m];}qsort(......
  • leetcode206. 反转链表
    一、链表(LinkedList)链表,是线性表的链式存储结构。一个链表中有若干个结点,每个结点都包含数据域和地址域两部分。数据域用于存储元素,地址域用于存储前驱或后继的地址。单链表:每个结点只有一个地址域的线性链表;双链表:每个结点都有两个地址域,分别指向前驱结点和后继结点。 ......
  • 蓝桥杯算法训练VIP-数组查找及替换
    题目1634:蓝桥杯算法训练VIP-数组查找及替换时间限制:3s内存限制:192MB提交:1629解决:890题目描述给定某整数数组和某一整数b。要求删除数组中可以被b整除的所有元素,同时将该数组各元素按从小到大排序。如果数组元素数值在A到Z的ASCII之间,替换为对应字母。输......
  • 高级前端开发工程师必须要熟练掌握的数组知识
    昨天分享了对象相关的基础知识,今天我们来了解一下JavaScript中另外一个非常重要的数据类型— 数组。1. 什么是数组数组是一种数据结构,用于存储和组织一组相关的元素。在编程中,数组提供了一个有效的方式来处理大量相似或相关的数据。每个值在数组中都有一个唯一的索引......
  • LeetCode[题解] 2864. 最大二进制奇数
    题目给你一个二进制字符串s,其中至少包含一个'1'。你必须按某种方式重新排列字符串中的位,使得到的二进制数字是可以由该组合生成的最大二进制奇数。以字符串形式,表示并返回可以由给定组合生成的最大二进制奇数。注意返回的结果字符串可以含前导零。示例1:输入:s......