2909. 元素和最小的山形三元组 II
# 2909. 元素和最小的山形三元组 II (opens new window)
# 1.前后缀+双指针
✨三元组题目枚举确定中心点,然后双指针向中心两侧遍历。
✨计算左右两侧数组的最大/小值,可以开辟一个后缀数组,先预处理计算后缀最值。前缀最值则只需要开辟一个前缀变量在遍历的过程维护。
class Solution {
public int minimumSum(int[] nums) {
int res=Integer.MAX_VALUE;
int[] suff=new int[nums.length];
suff[nums.length-1]=nums[nums.length-1];
for(int i=nums.length-2;i>=0;i--){
suff[i]=Math.min(suff[i+1],nums[i]);
}
int pre=nums[0];
for(int i=1;i<nums.length-1;i++){
int top=nums[i];
if(pre<top&&suff[i+1]<top) res=Math.min(res,top+pre+suff[i+1]);
pre=Math.min(pre,nums[i]);
}
if(res==Integer.MAX_VALUE) return -1;
return res;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
编辑 (opens new window)
上次更新: 2023/12/15, 15:49:57