
2026-02-17:最大子数组总值Ⅰ。用go语言,给定一个长度为 n 的整数数组 nums 和一个整数 k。 你需要从 nums 中挑出恰好 k 个非空的连续区间(子数组)。这些区间之间可以重叠,同一对左右端点 (l, r) 所表示的区间也可被重复选取多次。
每个区间的得分为该区间内元素的最大值减去最小值。总体得分等于所选 k 个区间得分的总和。 求能够获得的最大总体得分。
附注:这里“子数组”指数组中由若干相邻元素组成的非空区间。
1 <= n == nums.length <= 50000。
0 <= nums[i] <= 1000000000。
1 <= k <= 100000。
输入: nums = [4,2,5,1], k = 3。
输出: 12。
解释:
一种最优的方法是:
选择 nums[0..3] = [4, 2, 5, 1]。最大值为 5,最小值为 1,得到的值为 5 - 1 = 4。
选择 nums[1..3] = [2, 5, 1]。最大值为 5,最小值为 1,所以值也是 4。
选择 nums[2..3] = [5, 1]。最大值为 5,最小值为 1,所以值同样是 4。
将它们相加得到 4 + 4 + 4 = 12。
题目来自力扣3689。
关键观察:
.
package main
import (
"fmt"
"slices"
)
func maxTotalValue(nums []int, k int)int64 {
returnint64(slices.Max(nums)-slices.Min(nums)) * int64(k)
}
func main() {
nums := []int{4, 2, 5, 1}
k := 3
result := maxTotalValue(nums, k)
fmt.Println(result)
}

.
# -*-coding:utf-8-*-
def maxTotalValue(nums, k):
return (max(nums) - min(nums)) * k
def main():
nums = [4, 2, 5, 1]
k = 3
result = maxTotalValue(nums, k)
print(result)
if __name__ == "__main__":
main()
.
#include <iostream>
#include <vector>
#include <algorithm>
long long maxTotalValue(const std::vector<int>& nums, int k) {
int maxVal = *std::max_element(nums.begin(), nums.end());
int minVal = *std::min_element(nums.begin(), nums.end());
return static_cast<long long>(maxVal - minVal) * k;
}
int main() {
std::vector<int> nums = {4, 2, 5, 1};
int k = 3;
long long result = maxTotalValue(nums, k);
std::cout << result << std::endl;
return0;
}

·
我们相信人工智能为普通人提供了一种“增强工具”,并致力于分享全方位的AI知识。在这里,您可以找到最新的AI科普文章、工具评测、提升效率的秘籍以及行业洞察。 欢迎关注“福大大架构师每日一题”,发消息可获得面试资料,让AI助力您的未来发展。
·