2025-09-14:删除后的最大子数组元素和 用go语言,给你一个整数

B站影视 韩国电影 2025-09-14 06:44 7

摘要:2025-09-14:删除后的最大子数组元素和。用go语言,给你一个整数数组 nums。你可以删掉数组中任意多个元素,但至少要保留一个元素。删完以后,从剩下的元素中选出一个连续的片段(长度至少为1),且该片段内所有数互不相同。要求使这个片段的元素和尽可能大,返

2025-09-14:删除后的最大子数组元素和。用go语言,给你一个整数数组 nums。你可以删掉数组中任意多个元素,但至少要保留一个元素。删完以后,从剩下的元素中选出一个连续的片段(长度至少为1),且该片段内所有数互不相同。要求使这个片段的元素和尽可能大,返回能得到的最大和。

1

-100

输入:nums = [1,2,3,4,5]。

输出:15。

解释:

不删除任何元素,选中整个数组得到最大元素和。

题目来自力扣3487。

1. 初始化:创建一个集合(map)用于存储正数(去重),并初始化一个变量maxNum用于记录全局最大值(用于处理全非正情况)。

2. 遍历数组

• 对于每个元素,如果它是正数(>0),则加入集合(自动去重)。

• 同时更新全局最大值maxNum(记录所有元素中的最大值,包括负数)。

3. 判断正数是否存在

• 如果集合为空(即没有正数),则返回全局最大值maxNum(因为至少保留一个元素,所以最大和就是最大的那个负数)。

• 否则,计算集合中所有正数的和并返回。

时间复杂度:O(n)。遍历数组一次(n为数组长度),然后遍历集合(最坏情况所有正数都不同,但正数最多100个,所以常数时间)。因此总时间复杂度为O(n)。

空间复杂度:O(n)。最坏情况下,所有正数都不同(最多100个),因此集合的大小为O(n)(但n最大100,所以常数空间?但严格来说是O(n))。

package mainimport ( "fmt")func maxSum(nums int)int { positiveNumsSet := make(map[int]bool) maxNum := nums[0] for _, num := range nums { if num > 0 { positiveNumsSet[num] = true } maxNum = max(maxNum, num) } iflen(positiveNumsSet) == 0 { return maxNum } sum := 0 for num := range positiveNumsSet { sum += num } return sum}func main { nums := int{1, 2, 3, 4, 5} result := maxSum(nums) fmt.Println(result)}# -*-coding:utf-8-*-def max_sum(nums): # 假设 nums 非空(与原 Go 代码一致) positive_nums = set max_num = nums[0] for num in nums: if num > 0: positive_nums.add(num) if num > max_num: max_num = num if not positive_nums: return max_num return sum(positive_nums)if __name__ == "__main__": nums = [1, 2, 3, 4, 5] result = max_sum(nums) print(result)

我们相信Go语言和算法为普通开发者提供了困境的“面试利器”,并致力于分享全面的编程知识。在这里,您可以找到最新的Go语言教程、算法解析、提升面试竞争力的秘籍以及行业动态。

来源:煜城教育

相关推荐