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

2024-07-24:用go语言,给定一个整数数组 nums,其中至少包含两个元素。 可以根据以下规则执行操作:选择最前面两个元素删除、选择最后两个元素删除,或选择第一个和最后一个元素删除。 每次操作的更多相关文章
- 刷题之给定一个整数数组 nums 和一个目标值 taget,请你在该数组中找出和为目标值的那 两个 整数
今天下午,看了一会github,想刷个题呢,就翻出来了刷点题提高自己的实际中的解决问题的能力,在面试的过程中,我们发现,其实很多时候,面试官 给我们的题,其实也是有一定的随机性的,所以我们要多刷更多的 ...
- 给定一个整数数组 nums 和一个目标值 target,求nums和为target的两个数的下表
这个是来自力扣上的一道c++算法题目: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案 ...
- 给定一个整数数组nums和一个整数目标值target,请你在该数组中找出和为目标值target的那两个整数,并返回它们的数组下标。
/** * 给定一个整数数组nums和一个整数目标值target,请你在该数组中找出和为目标值target的那两个整数,并返回它们的数组下标. * * 你可以假设每种输入只会对应一个答案.但是,数组中 ...
- 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
class Solution { public int[] twoSum(int[] nums, int target) { for (int i = 0; i < nu ...
- LeetCode竞赛题:K 次取反后最大化的数组和(给定一个整数数组 A,我们只能用以下方法修改该数组:我们选择某个个索引 i 并将 A[i] 替换为 -A[i],然后总共重复这个过程 K 次。)
给定一个整数数组 A,我们只能用以下方法修改该数组:我们选择某个个索引 i 并将 A[i] 替换为 -A[i],然后总共重复这个过程 K 次.(我们可以多次选择同一个索引 i.) 以这种方式修改数组后 ...
- 给定长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积。-----力扣
给定长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积. 示例: 输入: [1 ...
- 给一个整数数组,找到两个数使得他们的和等于一个给定的数 target。
描述 给一个整数数组,找到两个数使得他们的和等于一个给定的数 target. 你需要实现的函数twoSum需要返回这两个数的下标, 并且第一个下标小于第二个下标.注意这里下标的范围是 0 到 n-1. ...
- c语言经典算法——查找一个整数数组中第二大数
题目: 实现一个函数,查找一个整数数组中第二大数. 算法思想: 设置两个变量max1和max2,用来保存最大数和第二大数,然后将数组剩余的数依次与这两个数比较,如果这个数a比max1大,则先将max1 ...
- 作业帮:给定一个整数数组,找出其中两个数相加等于目标值(去重set)
题目描述 给定一个整数数组,找出其中两个数相加等于目标值 输入 [1,3,5,7,9,11] 10 输出 1,9 3,7 代码: import java.util.HashMap; import ja ...
- 软件工程结对开发——返回一个整数数组中最大子数组的和(JAVA)
题目:返回一个整数数组中最大子数组的和. 要求: 输入一个整型数组,数组里有正数也有负数: 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和: 求所有子数组的和的最大值.要求时间复杂度为 ...
随机推荐
- 一个与 WSL2 建立远程的简单方法
前言 众所周知,windows 会通过虚拟交换机给本机和 wsl2(Linux 子系统)分别分配 ip.于是本机重启或重启 wsl 服务的时候会重新分配 ip.之前所作的端口转发,监听之类的都会失效. ...
- @synchronized(self) 加锁引起的Crash
一.最近米家App进入前台的时候上报上来一个Crash {"app_name":"MiHome","timestamp":"201 ...
- 浏览器的同源策略 jsonp方法解决跨域
// 浏览器的同源性 // 在 浏览器 处理请求时 默认执行的是 同源策略 // 也就是 浏览器 只 允许 同源的项目/请求 之间 获取响应体内容 // ...
- INFINI Labs 产品更新 | Agent 全新重构,优化指标采集,支持集中配置管理,支持动态下发等功能
INFINI Labs 产品又更新啦~ 本次更新主要有 Agent.Console.Loadgen 等产品,其中 Agent 进行全新重构升级,新版限制了 CPU 资源消耗,优化了内存,相比旧版内存使 ...
- redis自动化安装
1.ruby脚本自动化安装 1.安装ruby开发环境 yum install rubygems -y 2.通过ruby包管理工具,安装操作redis的模块 gem sources --remove h ...
- Vue学习:19.插槽实例
来个简单示例练练手吧. 实例:插槽实例 思路 在封装表格组件时,通常使用默认插槽和作用域插槽来处理固定的自定义结构. 代码 根组件(APP.vue) <template> <div& ...
- idea中vue的启动方式
1.选取 2.添加 3.配置 4.启动 启动前先 在终端 执行 npm install 命令 再启动
- 什么是JDBC,在上面时候会用到它?
JDBC的全称是Java DataBase Connection,也就是Java数据库连接,我们可以用它来操作关系型数据库.JDBC接口及相关类在java.sql包和javax.sql包里.我们可以用 ...
- mysql删除主键索引,删除索引语法
mysql删除主键索引,删除索引语法 ### Incorrect table definition; there can be only one auto column and it must be ...
- ELKF(elasticsearch、logstash、kibana、filebeat)搭建及收集nginx日志
1.elasticsearch 1.1.根目录下新建data文件夹 1.2.修改elasticsearch.yml文件,添加以下内容 path.data: /home/wwq/elk/elastics ...