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))
}

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

  1. 刷题之给定一个整数数组 nums 和一个目标值 taget,请你在该数组中找出和为目标值的那 两个 整数

    今天下午,看了一会github,想刷个题呢,就翻出来了刷点题提高自己的实际中的解决问题的能力,在面试的过程中,我们发现,其实很多时候,面试官 给我们的题,其实也是有一定的随机性的,所以我们要多刷更多的 ...

  2. 给定一个整数数组 nums 和一个目标值 target,求nums和为target的两个数的下表

    这个是来自力扣上的一道c++算法题目: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案 ...

  3. 给定一个整数数组nums和一个整数目标值target,请你在该数组中找出和为目标值target的那两个整数,并返回它们的数组下标。

    /** * 给定一个整数数组nums和一个整数目标值target,请你在该数组中找出和为目标值target的那两个整数,并返回它们的数组下标. * * 你可以假设每种输入只会对应一个答案.但是,数组中 ...

  4. 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。

    class Solution {     public int[] twoSum(int[] nums, int target) {         for (int i = 0; i < nu ...

  5. LeetCode竞赛题:K 次取反后最大化的数组和(给定一个整数数组 A,我们只能用以下方法修改该数组:我们选择某个个索引 i 并将 A[i] 替换为 -A[i],然后总共重复这个过程 K 次。)

    给定一个整数数组 A,我们只能用以下方法修改该数组:我们选择某个个索引 i 并将 A[i] 替换为 -A[i],然后总共重复这个过程 K 次.(我们可以多次选择同一个索引 i.) 以这种方式修改数组后 ...

  6. 给定长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积。-----力扣

    给定长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积. 示例: 输入: [1 ...

  7. 给一个整数数组,找到两个数使得他们的和等于一个给定的数 target。

    描述 给一个整数数组,找到两个数使得他们的和等于一个给定的数 target. 你需要实现的函数twoSum需要返回这两个数的下标, 并且第一个下标小于第二个下标.注意这里下标的范围是 0 到 n-1. ...

  8. c语言经典算法——查找一个整数数组中第二大数

    题目: 实现一个函数,查找一个整数数组中第二大数. 算法思想: 设置两个变量max1和max2,用来保存最大数和第二大数,然后将数组剩余的数依次与这两个数比较,如果这个数a比max1大,则先将max1 ...

  9. 作业帮:给定一个整数数组,找出其中两个数相加等于目标值(去重set)

    题目描述 给定一个整数数组,找出其中两个数相加等于目标值 输入 [1,3,5,7,9,11] 10 输出 1,9 3,7 代码: import java.util.HashMap; import ja ...

  10. 软件工程结对开发——返回一个整数数组中最大子数组的和(JAVA)

    题目:返回一个整数数组中最大子数组的和. 要求: 输入一个整型数组,数组里有正数也有负数: 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和: 求所有子数组的和的最大值.要求时间复杂度为 ...

随机推荐

  1. 一个与 WSL2 建立远程的简单方法

    前言 众所周知,windows 会通过虚拟交换机给本机和 wsl2(Linux 子系统)分别分配 ip.于是本机重启或重启 wsl 服务的时候会重新分配 ip.之前所作的端口转发,监听之类的都会失效. ...

  2. @synchronized(self) 加锁引起的Crash

    一.最近米家App进入前台的时候上报上来一个Crash {"app_name":"MiHome","timestamp":"201 ...

  3. 浏览器的同源策略 jsonp方法解决跨域

    // 浏览器的同源性         // 在 浏览器 处理请求时 默认执行的是 同源策略         // 也就是 浏览器 只 允许 同源的项目/请求 之间 获取响应体内容         // ...

  4. INFINI Labs 产品更新 | Agent 全新重构,优化指标采集,支持集中配置管理,支持动态下发等功能

    INFINI Labs 产品又更新啦~ 本次更新主要有 Agent.Console.Loadgen 等产品,其中 Agent 进行全新重构升级,新版限制了 CPU 资源消耗,优化了内存,相比旧版内存使 ...

  5. redis自动化安装

    1.ruby脚本自动化安装 1.安装ruby开发环境 yum install rubygems -y 2.通过ruby包管理工具,安装操作redis的模块 gem sources --remove h ...

  6. Vue学习:19.插槽实例

    来个简单示例练练手吧. 实例:插槽实例 思路 在封装表格组件时,通常使用默认插槽和作用域插槽来处理固定的自定义结构. 代码 根组件(APP.vue) <template> <div& ...

  7. idea中vue的启动方式

    1.选取 2.添加 3.配置 4.启动 启动前先 在终端  执行   npm  install  命令  再启动

  8. 什么是JDBC,在上面时候会用到它?

    JDBC的全称是Java DataBase Connection,也就是Java数据库连接,我们可以用它来操作关系型数据库.JDBC接口及相关类在java.sql包和javax.sql包里.我们可以用 ...

  9. mysql删除主键索引,删除索引语法

    mysql删除主键索引,删除索引语法 ### Incorrect table definition; there can be only one auto column and it must be ...

  10. ELKF(elasticsearch、logstash、kibana、filebeat)搭建及收集nginx日志

    1.elasticsearch 1.1.根目录下新建data文件夹 1.2.修改elasticsearch.yml文件,添加以下内容 path.data: /home/wwq/elk/elastics ...