leetcode_3584子序列首尾元素乘积最大值
1. 题意
给你一个整数数组 nums 和一个整数 m。
返回任意大小为 m 的 子序列 中首尾元素乘积的最大值。
子序列 是可以通过删除原数组中的一些元素(或不删除任何元素),且不改变剩余元素顺序而得到的数组。
2. 题解
由于序列的长度为 m m m, 我们可以枚举序列最后一个元素的位置;而对于序列的首元素的位置,从左往右不断获得最大值和最小值。这次获得的首元素位置一定可以用到下一次。
枚举序列右端点,维护序列左端点
class Solution {
public:long long maximumProduct(vector<int>& nums, int m) {int mx = nums[0];int mn = nums[0];int sz = nums.size();long long ans = 0;for (int i = 0;i <= sz - m; ++i) {mx = std::max( mx, nums[i]);mn = std::min( mn, nums[i]);if ( i == 0) {ans = (long long)nums[0] * nums[m - 1];}else {ans = std::max( (long long)mx * nums[i + m - 1], ans);ans = std::max( (long long)mn * nums[i + m - 1], ans);}}return ans;}
};