首页 > 其他分享 >2024-12-21:从魔法师身上吸取的最大能量。用go语言,在一个神秘的地牢里,有 n 名魔法师排成一列。每位魔法师都有一个能量属性,有的提供正能量,而有的则会消耗你的能量。 你被施加了一种诅咒,吸

2024-12-21:从魔法师身上吸取的最大能量。用go语言,在一个神秘的地牢里,有 n 名魔法师排成一列。每位魔法师都有一个能量属性,有的提供正能量,而有的则会消耗你的能量。 你被施加了一种诅咒,吸

时间:2024-12-21 14:09:16浏览次数:9  
标签:12 energy 魔法师 let ans 能量 复杂度

2024-12-21:从魔法师身上吸取的最大能量。用go语言,在一个神秘的地牢里,有 n 名魔法师排成一列。每位魔法师都有一个能量属性,有的提供正能量,而有的则会消耗你的能量。

你被施加了一种诅咒,吸收来自第 i 位魔法师的能量后,你会立即被传送到第 (i + k) 位魔法师。在这个过程中,你会不断进行这种跳跃,直到到达一个不存在的魔法师为止。

换句话说,你可以选择一个起始魔法师,并且以 k 为步长进行跳跃,直到超出魔法师的范围。在这个过程中,你需要计算出可以获得的最大能量。

给定一个能量数组和一个整数 k,返回你能够获得的最高能量值。

1 <= energy.length <= 100000。

-1000 <= energy[i] <= 1000。

1 <= k <= energy.length - 1。

输入: energy = [5,2,-10,-5,1], k = 3。

输出: 3。

解释:可以从魔法师 1 开始,吸收能量 2 + 1 = 3。

答案2024-12-21:

chatgpt

题目来自leetcode3147。

大体步骤如下:

1.初始化n为energy数组的长度,ans为math.MinInt(即int类型的最小值)。

2.从n-k的位置开始向后遍历数组energy。

3.对于当前位置i,初始化s为0,从i开始向前以步长k遍历每个魔法师。

4.在每个位置上,累加能量值到s中,并更新ans为当前的ans和s中的较大值。

5.返回最终的ans作为结果。

总的时间复杂度:

  • 外层循环迭代次数为k,内层从i位置开始以步长k遍历,需要O(n/k)次操作。

  • 所以总的时间复杂度为O(k * n/k) = O(n)。

总的额外空间复杂度:

  • 除了保存输入参数和几个变量外,算法并没有使用额外的空间存储数据。

  • 因此总的额外空间复杂度是O(1)(常数空间复杂度)。

Go完整代码如下:

package main

import (
	"fmt"
	"math"
)

func maximumEnergy(energy []int, k int) int {
	n := len(energy)
	ans := math.MinInt
	for i := n - k; i < n; i++ {
		s := 0
		for j := i; j >= 0; j -= k {
			s += energy[j]
			ans = max(ans, s)
		}
	}
	return ans
}

func main() {
	energy := []int{5, 2, -10, -5, 1}
	k := 3
	fmt.Println(maximumEnergy(energy, k))
}

在这里插入图片描述

Rust完整代码如下:

use std::cmp;

fn maximum_energy(energy: Vec<i32>, k: usize) -> i32 {
    let n = energy.len();
    let mut ans = i32::MIN;
    for i in (n - k..n).rev() {
        let mut s = 0;
        let mut j = i as isize;
        while j >= 0 {
            s += energy[j as usize];
            ans = cmp::max(ans, s);
            j -= k as isize;
        }
    }
    ans
}

fn main() {
    let energy = vec![5, 2, -10, -5, 1];
    let k = 3;
    println!("{}", maximum_energy(energy, k));
}

在这里插入图片描述

标签:12,energy,魔法师,let,ans,能量,复杂度
From: https://www.cnblogs.com/moonfdd/p/18620710

相关文章

  • 2024.12.20,数据结构课项目,解压与自解压,记录
    std::ifstream有什么成员函数std::ifstream是C++标准库中的输入文件流类,用于从文件中读取数据。它继承自std::istream,因此具有std::istream的所有成员函数。此外,它还提供了一些特定于文件操作的成员函数。常用成员函数构造函数:std::ifstream():默认构造函数。std::if......
  • 【每日一题】20241221
    【每日一题】一位国王的铸币大臣在每箱\(100\)枚的硬币中各参入了一枚劣币,国王怀疑大臣作弊,他用两种方法来检测.方法一:在\(10\)箱中各任意抽查一枚;方法二:在\(5\)箱中各任意抽查两枚.国王用方法一、二能发现至少一枚劣币的概率分别记为\(p_1\)和\(p_2\),则A.\(p_1>p_2\)......
  • OpenAI直播发布第12天:好消息,o3来了;坏消息,还不能用!
    大家好,我是木易,一个持续关注AI领域的互联网技术产品经理,国内Top2本科,美国Top10CS研究生,MBA。我坚信AI是普通人变强的“外挂”,专注于分享AI全维度知识,包括但不限于AI科普,AI工具测评,AI效率提升,AI行业洞察。关注我,AI之路不迷路,2024我们一起变强。今天是OpenAI连续12天直播发布......
  • 在职研生活&学习--20241213~因缘际会,相聚一堂——中南大学2024级MBA综合5班“五班卓越
      在银装素裹的冬日12月,中南大学2024级MBA综合5班的故事悄然展开,一场别开生面的班级团建活动成为了我们共同的记忆。为了进一步增强班级凝聚力,促进同学们之间的了解与友谊,综合5班于12月13日精心策划并成功举办了一场主题为“五班卓越,中南风采”的班级团建活动。活动在一片......
  • java网络爬虫 -2024/12/20
    借用maven项目,引入jsuop爬虫坐标<dependency><groupId>org.jsoup</groupId><artifactId>jsoup</artifactId><version>1.10.2</version></dependency>爬取网络小说代码packagecom.stdu;......
  • Luogu P8112 [Cnoi2021] 符文破译 题解 [ 蓝 ] [ KMP ] [ 线性 dp ] [ 决策单调性 dp
    符文破译:KMP+dp的好题。暴力dp不难打出一个暴力dp:设计\(dp_i\)表示当前前\(i\)位全部完成了匹配,所需的最小分割数。转移也是简单的,我们在KMP的过程中进行dp转移,每次选取next不断跳向再前面的next,然后进行转移即可。很显然一个字符集大小为\(1\)的串就能轻松......
  • 文件操作 -2024/12/19
    一些对文件的操作packageTestCode5;importjava.io.File;importjava.io.IOException;publicclassFile_Test1{publicstaticvoidmain(String[]args)throwsIOException{Filef=newFile("D:\\Idea项目\\NewStudy\\1.txt");//Sy......
  • 24.12.20 Spring
    极可能让类与类之间的关联降到最低原则责任单一原则需要用整个编程生涯来贯彻最少知道原则禁止跨级调用让一个类,认识/调用最少的类简化事务事务:添加修改删除,出错了,回滚仅仅使用一个注解,就能让事务生效集成了JUnit,方便测试简化了开发方便集成各种......
  • 12.16 二叉树的题目用acm模式 leetcode
    任务有leetcode1.将所有二叉树的题目用acm模式进行补充(完成了)github上面的所有二叉树ACM答案,模板https://github.com/PUNKDONG/leetcode/tree/master/src/treenodepackagetreenode;importjava.util.*;publicclasstreecode0_template{staticclassTreeNo......
  • GESP202412 八级【树上移动】题解(AC)
    》》》点我查看「视频」详解》》》[GESP202412八级]树上移动题目描述小杨有一棵包含nnn个节点的树,其中节点的编号从1......