给你一个下标从 0 开始的整数数组 。nums
请你从所有满足 的下标三元组 中,找出并返回下标三元组的最大值。 如果所有满足条件的三元组的值都是负数,则返回 。i < j < k
(i, j, k)
0
下标三元组 的值等于 。(i, j, k)
(nums[i] - nums[j]) * nums[k]
示例 1:
输入:nums = [12,6,1,2,7]
输出:77
解释:下标三元组 (0, 2, 4) 的值是 (nums[0] - nums[2]) * nums[4] = 77 。
可以证明不存在值大于 77 的有序下标三元组。
示例 2:
输入:nums = [1,10,3,4,19]
输出:133
解释:下标三元组 (1, 2, 4) 的值是 (nums[1] - nums[2]) * nums[4] = 133 。
可以证明不存在值大于 133 的有序下标三元组。
示例 3:
输入:nums = [1,2,3]
输出:0
解释:唯一的下标三元组 (0, 1, 2) 的值是一个负数,(nums[0] - nums[1]) * nums[2] = -3 。因此,答案是 0 。
提示:
3 <= nums.length <= 105
1 <= nums[i] <= 106
以中间的的点为中心,找出此点左边和右边的最大值。
class Solution {public static long maximumTripletValue(int[] nums) {int n = nums.length;long maxResult = 0;int[] rightMax = new int[n]; rightMax[n - 1] = 0;int currentMax = nums[n - 1];for (int i = n - 2; i >= 0; i--) {rightMax[i] = currentMax;if (nums[i] > currentMax) {currentMax = nums[i];}}int[] leftMax = new int[n];leftMax[0] = 0;currentMax = nums[0];for (int i = 1; i < n; i++) {leftMax[i] = currentMax;if (nums[i] > currentMax) {currentMax = nums[i];}}for (int j = 1; j < n - 1; j++) {long value = (long)(leftMax[j] - nums[j]) * rightMax[j];if (value > maxResult) {maxResult = value;}}return maxResult > 0 ? maxResult : 0;}
}