首页 星云 工具 资源 星选 资讯 热门工具
:

PDF转图片 完全免费 小红书视频下载 无水印 抖音视频下载 无水印 数字星空

2024-07-24:用go语言,给定一个整数数组 nums,其中至少包含两个元素。 可以根据以下规则执行操作:选择最前面两个元素删除、选择最后两个元素删除,或选择第一个和最后一个元素删除。 每次操作

编程知识
2024年07月24日 14:00

2024-07-24:用go语言,给定一个整数数组 nums,其中至少包含两个元素。

可以根据以下规则执行操作:选择最前面两个元素删除、选择最后两个元素删除,或选择第一个和最后一个元素删除。

每次操作的得分是被删除元素的和。

在每次操作后,所有操作得分需保持相同。

问题要求确定在这些前提下,最多可以进行多少次操作。

最终需要返回可进行的最大操作次数。

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

输出:2。

解释:我们执行以下操作:

删除前两个元素,分数为 3 + 2 = 5 ,nums = [6,1,4] 。

删除最后两个元素,分数为 1 + 4 = 5 ,nums = [6] 。

至多进行 2 次操作。

答案2024-07-24:

chatgpt

题目来自leetcode3040。

大体步骤如下:

1.程序定义了一个 maxOperations 函数,其中传入一个整数数组 nums,函数返回最大操作次数。

2.在 maxOperations 函数中,创建了一个长度为数组长度的二维 memo 数组,用于记忆化搜索。

3.定义了一个内部帮助函数 helper,实现了动态规划解决问题的过程。

4.在 helper 函数中,通过递归实现每次操作的得分计算,以及记录每次操作的得分情况,并最终返回最大操作次数。

5.主要操作包括选择删除开头两个元素,删除末尾两个元素,或者删除第一个和最后一个元素三种情况。

6.在主函数中,给定了一个示例数组 [3,2,6,1,4],并输出了最大操作次数。

总的时间复杂度:

  • 定义 memo 数组时的时间复杂度:O(n^2)

  • 递归计算操作得分的时间复杂度:O(n^2)

  • 总体时间复杂度为 O(n^2)

总的额外空间复杂度:

  • memo 数组的额外空间复杂度为 O(n^2),用于记忆化搜索。

  • 递归调用过程中的栈空间开销不考虑。

  • 总体额外空间复杂度为 O(n^2)。

Go完整代码如下:

package main

import (
	"fmt"
)

func maxOperations(nums []int) int {
    n := len(nums)
	memo := make([][]int, n)
	
    helper := func(i, j, target int) int {
        for i := range memo {
            memo[i] = make([]int, n)
            for j := range memo[i] {
                memo[i][j] = -1
            }
        }

        var dfs func(int, int) int
        dfs = func(i, j int) int {
            if i >= j {
                return 0
            }
            if memo[i][j] != -1 {
                return memo[i][j]
            }

            ans := 0
            if nums[i] + nums[i + 1] == target {
                ans = max(ans, 1 + dfs(i + 2, j))
            }
            if nums[j - 1] + nums[j] == target {
                ans = max(ans, 1 + dfs(i, j - 2))
            }
            if nums[i] + nums[j] == target {
                ans = max(ans, 1 + dfs(i + 1, j - 1))
            }
            memo[i][j] = ans
            return ans
        }
        return dfs(i, j)
    }
	
	res := 0
	res = max(res, helper(0, n - 1, nums[0] + nums[n - 1]))
	res = max(res, helper(0, n - 1, nums[0] + nums[1]))
	res = max(res, helper(0, n - 1, nums[n - 2] + nums[n - 1]))
	return res
}

func main() {
	nums:=[]int{3,2,6,1,4}
	fmt.Println(maxOperations(nums))
}

在这里插入图片描述

From:https://www.cnblogs.com/moonfdd/p/18320914
本文地址: http://shuzixingkong.net/article/374
0评论
提交 加载更多评论
其他文章 关于学习.NET的历程回顾与今后的探索实践方向
关于学习.NET的历程回顾 自从2023年9月11日注册公众号以来,这次还是第一次介绍自己。我今年24岁,双非本,211硕,非计算机相关专业。大学期间接触过计算机相关的课程可能就《大学生计算机基础》、《C语言程序设计》,并且也没掌握多好。 22年4月研究生复试结束,联系好导师后,由于导师研究方向的缘
关于学习.NET的历程回顾与今后的探索实践方向 关于学习.NET的历程回顾与今后的探索实践方向 关于学习.NET的历程回顾与今后的探索实践方向
Python用shp文件裁剪多个遥感影像的方法
本文介绍基于Python中ArcPy模块,基于矢量数据范围,对大量栅格遥感影像加以批量裁剪掩膜的方法~
Python用shp文件裁剪多个遥感影像的方法
2024年护网23个漏洞POC合集
2024年护网23个漏洞POC合集
2024年护网23个漏洞POC合集
OI生涯回忆&退役之后
一个人的命运啊,当然要靠自我奋斗,但是也要考虑到历史的进程 --《庄子·秋水》 好吧,现在是2024年7月24日,我现在正坐在某编程机构的办公室电脑旁,写下这些文字,是啊,我已经退役将近两年了,而这两年里,我的人生已经发生了翻天覆地的变化,发生了很多事,我对OI的看法也一而再的转变。而我只
Linux 文本文件编辑相关命令简介【Linux 常用命令系列二】
本文介绍了如何通过 vim 命令,对文本文件进行打开、编辑、保存等相关操作,并通过简单的示例演示了常用用法。
Linux 文本文件编辑相关命令简介【Linux 常用命令系列二】 Linux 文本文件编辑相关命令简介【Linux 常用命令系列二】 Linux 文本文件编辑相关命令简介【Linux 常用命令系列二】
Known框架实战演练——进销存业务单据
本文介绍如何实现进销存管理系统的业务单据模块,业务单据模块包括采购进货单、采购退货单、销售出货单、销售退货单4个菜单页面。由于进销单据字段大同小异,因此设计共用一个页面组件类。 项目代码:JxcLite 开源地址: https://gitee.com/known/JxcLite 1. 配置模块 运行
Android Spingboot 实现SSE通信案例
SSE SSE(Server-Sent Events)是一种用于实现服务器主动向客户端推送数据的技术,它基于 HTTP 协议,利用了其长连接特性,在客户端与服务器之间建立一条持久化连接,并通过这条连接实现服务器向客户端的实时数据推送。 Server-Sent Events (SSE) 和 Socke
Android Spingboot 实现SSE通信案例 Android Spingboot 实现SSE通信案例 Android Spingboot 实现SSE通信案例
DASCTF 2023 & 0X401七月暑期挑战赛【PWN】(FileEditor篇)
DASCTF 2023 & 0X401七月暑期挑战赛【PWN】(FileEditor篇) 题目保护情况(保护全家桶) 64位ida逆向 模拟了一个类似vim的功能,有打开文件,打印内容,插入行,删除行,复制行,和编辑行,还有查找字符和替换字符的功能,然后就是保存退出 一个一个来分析吧 1.o
DASCTF 2023 & 0X401七月暑期挑战赛【PWN】(FileEditor篇) DASCTF 2023 & 0X401七月暑期挑战赛【PWN】(FileEditor篇) DASCTF 2023 & 0X401七月暑期挑战赛【PWN】(FileEditor篇)