首页 > 其他分享 >2024-09-11:用go语言,给定一个从0开始的整数数组nums和一个正奇数整数k, 要求在nums数组中选择k个不重叠的子数组, 使得这些子数组的能量值之和最大。 子数组的能量值是通过一定规则计

2024-09-11:用go语言,给定一个从0开始的整数数组nums和一个正奇数整数k, 要求在nums数组中选择k个不重叠的子数组, 使得这些子数组的能量值之和最大。 子数组的能量值是通过一定规则计

时间:2024-09-11 21:52:24浏览次数:3  
标签:nums int make 整数 选择 数组 能量

2024-09-11:用go语言,给定一个从0开始的整数数组nums和一个正奇数整数k,

要求在nums数组中选择k个不重叠的子数组,

使得这些子数组的能量值之和最大。

子数组的能量值是通过一定规则计算得到的,

具体规则是对于某个子数组,将其每个元素乘以一个特定系数,

并将这些结果相加,系数随着元素在子数组中位置的变化而变化。

最终,要求找到一组k个不重叠的子数组,使得这些子数组的能量值之和达到最大值。

需要注意的是,选择的子数组不需要覆盖整个原始数组。

最后要返回能够获得的最大能量值。

输入:nums = [1,2,3,-1,2], k = 3。

输出:22。

解释:选择 3 个子数组的最好方式是选择:nums[0..2] ,nums[3..3] 和 nums[4..4] 。能量值为 (1 + 2 + 3) * 3 - (-1) * 2 + 2 * 1 = 22 。

答案2024-09-11:

chatgpt

题目来自leetcode3077。

大体步骤如下:

1.创建长度为 n+1 的累积和数组 s,其中 s[i] 存储前 i 个元素的和。

2.创建长度为 n+1 的数组 f,用于存放最大能量值累积。

3.循环k次,表示每次选择一个子数组的过程:

3.a.初始化 pre 为 f[i-1],f[i-1] 为负无穷大,设置初始最大值为负无穷大,定义一个权重 w。

3.b.从第 i 个位置开始循环到 n-k+i 位置,计算每次选择一个子数组后的最大能量值,并更新 f[j]。

4.返回最终的最大能量值 f[n]。

总的时间复杂度为 O(n*k),其中 n 为数组的长度。

总的额外空间复杂度为 O(n),主要由额外创建的两个长度为 n+1 的数组所占据。

Go完整代码如下:

package main

import (
	"fmt"
	"math"
)

func maximumStrength(nums []int, k int) int64 {
	n := len(nums)
	s := make([]int, n+1)
	for i, x := range nums {
		s[i+1] = s[i] + x
	}
	f := make([]int, n+1)
	for i := 1; i <= k; i++ {
		pre := f[i-1]
		f[i-1] = math.MinInt
		mx := math.MinInt
		w := (k - i + 1) * (i%2*2 - 1)
		for j := i; j <= n-k+i; j++ {
			mx = max(mx, pre-s[j-1]*w)
			pre = f[j]
			f[j] = max(f[j-1], s[j]*w+mx)
		}
	}
	return int64(f[n])
}

func main() {
	nums := []int{1, 2, 3, -1, 2}
	k := 3
	fmt.Println(maximumStrength(nums, k))
}

2024-09-11:用go语言,给定一个从0开始的整数数组nums和一个正奇数整数k, 要求在nums数组中选择k个不重叠的子数组, 使得这些子数组的能量值之和最大。 子数组的能量值是通过一定规则计_数组

Rust完整代码如下:

package main

import (
	"fmt"
	"math"
)

func maximumStrength(nums []int, k int) int64 {
	n := len(nums)
	s := make([]int, n+1)
	for i, x := range nums {
		s[i+1] = s[i] + x
	}
	f := make([]int, n+1)
	for i := 1; i <= k; i++ {
		pre := f[i-1]
		f[i-1] = math.MinInt
		mx := math.MinInt
		w := (k - i + 1) * (i%2*2 - 1)
		for j := i; j <= n-k+i; j++ {
			mx = max(mx, pre-s[j-1]*w)
			pre = f[j]
			f[j] = max(f[j-1], s[j]*w+mx)
		}
	}
	return int64(f[n])
}

func main() {
	nums := []int{1, 2, 3, -1, 2}
	k := 3
	fmt.Println(maximumStrength(nums, k))
}

2024-09-11:用go语言,给定一个从0开始的整数数组nums和一个正奇数整数k, 要求在nums数组中选择k个不重叠的子数组, 使得这些子数组的能量值之和最大。 子数组的能量值是通过一定规则计_i++_02

标签:nums,int,make,整数,选择,数组,能量
From: https://blog.51cto.com/moonfdd/11984065

相关文章

  • 整数和浮点数在内存中储存
    1.整数的储存在生活中,我们通常运用十进制计数。而在计算机数据在内存中是以二进制的方式存储。1).整数的存储方式整数的2进制表示方法有三种,即原码、反码和补码 有符号的整数,三种表示方法均有符号位和数值位两部分,符号位都是用0表示“正”,用1表示“负”,最高位的⼀位是被......
  • 5.输入三个整数 x,y,z,请把这三个数由小到大输出
    【程序5】题目:输入三个整数x,y,z,请把这三个数由小到大输出。1.程序分析:我们想办法把最小的数放到x上,先将x与y进行比较,如果x>y则将x与y的值进行交换,然后再用x与z进行比较,如果x>z则将x与z的值进行交换,这样能使x最小。2.程序源代码:#创建一个空列......
  • 数组
    声明与创建数组packagecom.array;publicclassDemo01{publicstaticvoidmain(String[]args){//变量的类型变量的名字=变量的值int[]nums;//1.声明一个数组。数组定义,但是没有赋值intnums2[];//也是数组定义nums=new......
  • C++中的数组,字符串数组,pair数组
    1.C++中的字符串数组: 2.C++中的常量数组 这个constpair<int,string>valueSymbols[]定义了一个常量数组,数组中的每个元素都是一个pair<int,string>类型的对象。pair是C++标准模板库(STL)中的一个模板类,用于将两个值组合成一个单一的对象。在这个特定的例子中,pair的第一个......
  • LeetCode 977.有序数组的平方 (java)
    给你一个按非递减顺序排序的整数数组nums,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。示例1:输入:nums=[-4,-1,0,3,10]输出:[0,1,9,16,100]解释:平方后,数组变为[16,1,0,9,100],排序后,数组变为[0,1,9,16,100]示例2:输入:nums=[-7,-3,2,3,11]输出:[4,9,9,......
  • 滑动窗口&动态规划-1031. 两个非重叠子数组的最大和
    问题描述问题求解本题还挺巧妙,有点类似两数和的扩展题。对于两个线段,我们可以固定右线段,然后寻找左线段的最大值。固定右线段使用到的算法是滑动窗口,寻找左线段最大值的算法是动态规划。时间复杂度:O(n)classSolution:defmaximizeWin(self,prizePositions:List[int......
  • 给你一个promise数组,我需要并行执行,并且数组里面所有promise全部抛出错误之后,才抛出错
    今天面试,遇到如标题这么一个问题,真的给我问懵逼了,一开始想说使用promise.all,但是不行,因为promise.all只要有一个抛出错误了,整个promise.all就全部失败了。当时给我问的支支吾吾的打答不出来,并且还需要并行执行,想破头了都想不出来。后面回来重新学习ECMAScript才发现,使用一个API,pro......
  • C++ 不要将有符号整数和无符号整数相加
    一有符号整数和无符号整数相加时,把负数转换成无符号数类似于直接给无符号数赋一个负值,结果等于这个负数加上无符号数的模。unsignedintn=300;intm=-500;cout<<m+m<<'\n';cout<<n+m<<'\n';输出:-1000//正确4294967096//错误结果做个类型......
  • Java数组篇[10]:数组的常见应用场景
    哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区:C站/掘金/腾讯云;欢迎大家常来逛逛  今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。  我是一名后端开发爱好者,工作日常接触到最多的就是Jav......
  • 贪心算法day28|买卖股票的最佳时机、55. 跳跃游戏、1005. K 次取反后最大化的数组和
    贪心算法day28|买卖股票的最佳时机、55.跳跃游戏、1005.K次取反后最大化的数组和122.买卖股票的最佳时机II55.跳跃游戏1005.K次取反后最大化的数组和122.买卖股票的最佳时机II给你一个整数数组prices,其中prices[i]表示某支股票第i天的价格。在每一......