题目:
给你一个下标从 0 开始、由正整数组成的数组 nums
。
你可以在数组上执行下述操作 任意 次:
- 选中一个同时满足
0 <= i < nums.length - 1
和nums[i] <= nums[i + 1]
的整数i
。将元素nums[i + 1]
替换为nums[i] + nums[i + 1]
,并从数组中删除元素nums[i]
。
返回你可以从最终数组中获得的 最大元素的值。
想法:
分析题意:反复比较数组中相邻的两个数,若后面的数大于等于前面的数,则将两数相加,替换原数组中后面那个数,并删掉前面的数。最终求得数组中能变化出的最大的元素。
思考:
1. 因为要得到最大的元素,所以要尽量多让数组中的元素相加 ----> 尽量让靠后的数字更大 ----> 从后往前遍历数组
2. 因为只要前面的数更小,就一定会在循环中被合并,所以最后得到的数组的第一个元素就是最大的。
代码如下:
class Solution(object):
def maxArrayValue(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
n = len(nums)
i = 0
while 0 <= i <n-1:
# 倒序遍历数组,保证靠后的数尽量大
# 判断符合条件,则将两数相加填到靠前那个数的位置
if nums[n-i-2] <= nums[n-i-1]:
nums[n-i-2] += nums[n-i-1]
nums.pop(n-i-1) # 删除靠后那个数
n -= 1 # 数组长度减一
i -= 1 # 循环条件减一,使接下来判断新数与其前面的数
i += 1
return nums[0]
运行通过: