Input: nums =[8,6,1,5,3]Output: 9Explanation: Triplet (2,3,4)is a mountain triplet of sum 9 since:-2<3<4- nums[2]< nums[3] and nums[4]< nums[3]And the sum of this triplet is nums[2]+ nums[3]+ nums[4]=9. It can be shown that there are no mountain triplets with a sum of less than 9.
Input: nums =[5,4,8,7,10,2]Output: 13Explanation: Triplet (1,3,5)is a mountain triplet of sum 13 since:-1<3<5- nums[1]< nums[3] and nums[5]< nums[3]And the sum of this triplet is nums[1]+ nums[3]+ nums[5]=13. It can be shown that there are no mountain triplets with a sum of less than 13.
For each possible middle index j, find the smallest nums[i] to the left of j (where nums[i] < nums[j]) and the smallest nums[k] to the right of j (where nums[k] < nums[j]). The minimum sum among all valid triplets is the answer.
classSolution {
publicintminimumSum(int[] nums) {
int n = nums.length, ans = Integer.MAX_VALUE;
int[] left =newint[n], right =newint[n];
int minl = Integer.MAX_VALUE;
for (int i = 0; i < n; i++) {
left[i]= minl;
if (nums[i]< minl) minl = nums[i];
}
int minr = Integer.MAX_VALUE;
for (int i = n-1; i >= 0; i--) {
right[i]= minr;
if (nums[i]< minr) minr = nums[i];
}
for (int j = 1; j < n-1; j++) {
if (left[j]< nums[j]&& right[j]< nums[j])
ans = Math.min(ans, left[j]+ nums[j]+ right[j]);
}
return ans == Integer.MAX_VALUE?-1 : ans;
}
}
classSolution {
funminimumSum(nums: IntArray): Int {
val n = nums.size
val left = IntArray(n)
val right = IntArray(n)
var minl = Int.MAX_VALUE
for (i in0 until n) {
left[i] = minl
if (nums[i] < minl) minl = nums[i]
}
var minr = Int.MAX_VALUE
for (i in n-1 downTo 0) {
right[i] = minr
if (nums[i] < minr) minr = nums[i]
}
var ans = Int.MAX_VALUE
for (j in1 until n-1) {
if (left[j] < nums[j] && right[j] < nums[j])
ans = minOf(ans, left[j] + nums[j] + right[j])
}
returnif (ans ==Int.MAX_VALUE) -1else ans
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
classSolution:
defminimumSum(self, nums: list[int]) -> int:
n = len(nums)
left = [float('inf')] * n
right = [float('inf')] * n
minl = float('inf')
for i in range(n):
left[i] = minl
if nums[i] < minl: minl = nums[i]
minr = float('inf')
for i in range(n-1, -1, -1):
right[i] = minr
if nums[i] < minr: minr = nums[i]
ans = float('inf')
for j in range(1, n-1):
if left[j] < nums[j] and right[j] < nums[j]:
ans = min(ans, left[j] + nums[j] + right[j])
return-1if ans == float('inf') else ans