翻转子数组得到最大的数组值【LC1330】
给你一个整数数组 nums
。「数组值」定义为所有满足 0 <= i < nums.length-1
的 |nums[i]-nums[i+1]|
的和。
你可以选择给定数组的任意子数组,并将该子数组翻转。但你只能执行这个操作 一次 。
请你找到可行的最大 数组值 。
emm…早上起来发烧了,然后去了医院发现阳了,之前那么多人阳都没有阳过。也许是拔完智齿抵抗力下降就阳了?
这种下次遇到也不会的题目就不过多研究了
class Solution { public int maxValueAfterReverse(int[] nums) { int base = 0, d = 0, n = nums.length; int mx = Integer.MIN_VALUE, mn = Integer.MAX_VALUE; for (int i = 1; i < n; i++) { int a = nums[i - 1], b = nums[i]; int dab = Math.abs(a - b); base += dab; mx = Math.max(mx, Math.min(a, b)); mn = Math.min(mn, Math.max(a, b)); d = Math.max(d, Math.max(Math.abs(nums[0] - b) - dab, // i=0 Math.abs(nums[n - 1] - a) - dab)); // j=n-1 } return base + Math.max(d, 2 * (mx - mn)); } } 作者:灵茶山艾府 链接:https://leetcode.cn/problems/reverse-subarray-to-maximize-array-value/solutions/2266500/bu-hui-hua-jian-qing-kan-zhe-pythonjavac-c2s6/ 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
复杂度分析
- 时间复杂度:O(n)
- 空间复杂度:O(1)