1330. 翻转子数组得到最大的数组值
给你一个整数数组 nums 。「 数组值」定义为所有满足 0 <= i < nums.length-1 的 |nums[i]-nums[i+1]| 的和。
你可以选择给定数组的任意子数组,并将该子数组翻转。但你只能执行这个操作 一次 。
请你找到可行的最大 数组值 。
示例 1:
输入:nums = [2,3,1,5,4]
输出:10
解释:
通过翻转子数组 [3,1,5] ,数组变成 [2,5,1,3,4] ,数组值为 10 。
示例 2:
输入:nums = [2,4,9,24,2,1,10]
输出:68
提示:
- 1 <= nums.length <= 3*10^4
- -10^5 <= nums[i] <= 10^5
Solution
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| func maxValueAfterReverse(_ nums: [Int]) -> Int { var maxi = Int.min/100, mini = Int.max/100 let n = nums.count var change = 0 for i in 0..<n-1 { let a = nums[i], b = nums[i+1] change = max(change, abs(nums[0] - b) - abs(a - b)); change = max(change, abs(nums[n - 1] - a) - abs(a - b)); mini = min(mini, max(a, b)); maxi = max(maxi, min(a, b)); } var srcSum = 0 for i in 0..<n-1 { srcSum += abs(nums[i] - nums[i+1]) } return srcSum + max(change, (maxi - mini) * 2) }
|