2024-07-17:用go语言,给定一个整数数组nums, 我们可以重复执行以下操作: 选择数组中的前两个元素并删除它们, 每次操作得到的分数是被删除元素的和。 在保持所有操作的分数相同的前提下,
2024-07-17:用go语言,给定一个整数数组nums,
我们可以重复执行以下操作:
选择数组中的前两个元素并删除它们,
每次操作得到的分数是被删除元素的和。
在保持所有操作的分数相同的前提下,
请计算最多能执行多少次操作。
返回可以进行的最大操作次数。
输入:nums = [3,2,1,4,5]。
输出:2。
解释:我们执行以下操作:
1.删除前两个元素,分数为 3 + 2 = 5 ,nums = [1,4,5] 。
2.删除前两个元素,分数为 1 + 4 = 5 ,nums = [5] 。
由于只剩下 1 个元素,我们无法继续进行任何操作。
答案2024-07-17:
题目来自leetcode3038。
大体步骤如下:
1.初始化变量:设定初始索引 i 为 1、t(操作次数)为 0。
2.循环直至结束条件:进行循环,每次增加 2 然后检查是否满足条件以继续操作。
3.检查是否能继续操作:检查当前两个元素与第一次删除的两个元素之和是否相等,如果不相等,则退出循环。
4.更新操作次数:如果满足条件,增加操作次数 t。
5.返回最大操作次数:最终返回 t 作为最大操作次数。
总的时间复杂度是 O(n),其中 n 是 nums 数组的长度。因为我们只需要遍历一次整个数组,执行的操作是固定的,不会随着数组变大而增加时间复杂度。
总的额外空间复杂度是 O(1),因为除了用于存储输入参数 nums 外,我们只使用了固定数量的变量(如 n、t、i)来计算最大操作次数,不随着输入的变化而增加额外的空间。
Go完整代码如下:
package main
import (
"fmt"
)
func maxOperations(nums []int) int {
n, t := len(nums), 0
for i := 1; i < n; i += 2 {
if nums[i] + nums[i - 1] != nums[1] + nums[0] {
break
}
t++
}
return t
}
Python完整代码如下:
# -*-coding:utf-8-*-
def maxOperations(nums):
n, t = len(nums), 0
for i in range(1, n, 2):
if nums[i] + nums[i - 1] != nums[1] + nums[0]:
break
t += 1
return t
def main():
nums = [3, 2, 1, 4, 5]
print(maxOperations(nums))
if __name__ == "__main__":
main()
公众号:福大大架构师每日一题
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
2023-07-17 文心一言 VS 讯飞星火 VS chatgpt (61)-- 算法导论6.4 5题
2023-07-17 2023-07-17:给定一个数组arr,长度为n, 再给定一个数字k,表示一定要将arr划分成k个集合, 每个数字只能进一个集合。 返回每个集合内部的平均值都累加起来最小的值。 平均值向下取整。 1
2022-07-17 2022-07-17:1、2、3...n-1、n、n、n+1、n+2... 在这个序列中,只有一个数字有重复(n)。 这个序列是无序的,找到重复数字n。 这个序列是有序的,找到重复数字n。
2021-07-17 2021-07-17:一个不含有负数的数组可以代表一圈环形山,每个位置的值代表山的高度。比如, {3,1,2,4,5}、{4,5,3,1,2}或{1,2,4,5,3}都代表同样结构的环形山。山峰A和山