本文最后更新于 198 天前,其中的信息可能已经有所发展或是发生改变。
给你一个下标从 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.length <= 105
1 <= nums[i] <= 106
示例 :
输入: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 。可以证明我们无法获得更大的元素。
解法一:
class Solution(object):
def maxArrayValue(self, nums):
left=len(nums)-2
right=len(nums)-1
ret=nums[right]
while left>= 0:
if nums[left]<=nums[right]:
nums[right]+=nums[left]
nums[left]=-1 #将已经参与加法运算的数变为-1 ,这样就它就不会再进入nums[left]<=nums[right] 这个循环
print(nums)
left-=1
else:
right=left #从最后两个数开始遍历
left-=1
ret=max(ret,nums[right])
return ret
nums = [2, 11, 3, 7, 3]
obj = Solution()
obj.maxArrayValue(nums)
解法二(贪心 + 倒序遍历数组)
class Solution:
def maxArrayValue(self, nums):
for i in range(len(nums) - 2, -1, -1):
if nums[i] <= nums[i + 1]:
nums[i] += nums[i + 1]
return nums[0]