手机如何建免费网站,山东政务网站建设,哔哩哔哩推广网站,x网站免费题目#xff1a;
给你一个下标从 0 开始的整数数组 nums 。
请你从所有满足 i j k 的下标三元组 (i, j, k) 中#xff0c;找出并返回下标三元组的最大值。如果所有满足条件的三元组的值都是负数#xff0c;则返回 0 。
下标三元组 (i, j, k) 的值等于 (nums[i]…题目
给你一个下标从 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 100 1 nums[i] 10^6
java代码
class Solution {public long maximumTripletValue(int[] nums) {int n nums.length;int[] sufMax new int[n 1];for (int i n - 1; i 1; i--) {sufMax[i] Math.max(sufMax[i 1], nums[i]);}long ans 0;int preMax nums[0];for (int j 1; j n - 1; j) {ans Math.max(ans, (long) (preMax - nums[j]) * sufMax[j 1]);preMax Math.max(preMax, nums[j]);}return ans;}
}