django企业网站源码,又一个wordpress站点怎么进,网页版微信传文件,俄罗斯乌克兰开战题目描述#xff1a;
给你一个下标从 0 开始的整数数组 nums 。
如果下标三元组 (i, j, k) 满足下述全部条件#xff0c;则认为它是一个 山形三元组 #xff1a;
i j knums[i] nums[j] 且 nums[k] nums[j]
请你找出 nums 中 元素和最小 的山形三元组…题目描述
给你一个下标从 0 开始的整数数组 nums 。
如果下标三元组 (i, j, k) 满足下述全部条件则认为它是一个 山形三元组
i j knums[i] nums[j] 且 nums[k] nums[j]
请你找出 nums 中 元素和最小 的山形三元组并返回其 元素和 。如果不存在满足条件的三元组返回 -1 。 示例 1
输入nums [8,6,1,5,3]
输出9
解释三元组 (2, 3, 4) 是一个元素和等于 9 的山形三元组因为
- 2 3 4
- nums[2] nums[3] 且 nums[4] nums[3]
这个三元组的元素和等于 nums[2] nums[3] nums[4] 9 。可以证明不存在元素和小于 9 的山形三元组。示例 2
输入nums [5,4,8,7,10,2]
输出13
解释三元组 (1, 3, 5) 是一个元素和等于 13 的山形三元组因为
- 1 3 5
- nums[1] nums[3] 且 nums[5] nums[3]
这个三元组的元素和等于 nums[1] nums[3] nums[5] 13 。可以证明不存在元素和小于 13 的山形三元组。示例 3
输入nums [6,5,4,3,4,5]
输出-1
解释可以证明 nums 中不存在山形三元组。提示
3 nums.length 1051 nums[i] 108
思路
题目的意思是求元素和最小 的山形三元组而且这三个数满足 i j knums[i] nums[j] 且 nums[k] nums[j] 也就是说中间那个数大于左右两边就行。
k的范围是1-nums.size()-2我们遍历数组下标为1-nums.size()-2当前的nums[i]表示的是山形三元组最中间的那个数由于答案求元素和最小 每次遍历nums[i],都去找i前面最小的数,再去找i后面最小的数这样求得的和对于nums[i]做山形三元组中间的数的所有三元组的和来说是最小的遍历整个数组再对这个和取min就是答案了。
为什么这样求得的ans会是所有山形三元组的和的最小值呢假设a[i]表示下标为i的元素作为山形三元组中间元素的最小和a[i]nums[i]左边最小的数右边最小的数ansmin(a[i],ans).
所以ans是所有可能答案中的最小值。
代码
class Solution {
public:int minimumSum(vectorint nums) {int lennums.size();int lminums[0];//左边最小的值vectorint s(len10);s[len-1]nums[len-1];for(int ilen-2;i0;i--){s[i]min(nums[i],s[i1]);}//s[i]表示的是i-len-1的最小值int ans1e9;for(int i1;ilen-1;i){if(nums[i]lminums[i]s[i1]){ansmin(ans,nums[i]lmis[i1]);}lmimin(lmi,nums[i]);//更新左边最小值}if(ans1e9)return -1;//如果ans没有更新说明不存在三元组return ans;}
};