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. MD5计算,一个扩展类,哪里都能用

    最近有同学问到如何计算一个字节数组的MD5值,现在分享一个扩展类,有了它,MD5计算再也不用其他了. 先看示例: string s = "hello world"; var s_m ...

  2. OpenVSCode云端IDE加入Rainbond一体化开发体系

    OpenVSCode 是一款基于Web 界面的在线IDE 代码编辑器,只需要PC端存在浏览器即可使用,更轻量,高效,简洁,其基础功能完全继承了微软出品的 VS Code ,可以通过安装扩展的方式继续加 ...

  3. UILabel的DrawDrect方法

    一.问题 如果继承UILabel实现自己的一个Label,并且在子类的DrawRect方法中留空,什么都不写,会发生什么? 代码如下: VC @interface ViewController () ...

  4. C++笔记(9) 异常

    程序有时会遇到运行阶段错误,导致程序无法正常走下去.对于这种问题,处理方法主要有: 1.调用abort() Abort()函数原型位于头文件cstdlib,其典型实现是向标准错误流(即cerr使用的错 ...

  5. Centos7安装Nginx教程,一步安装http和https

    nginx是一款轻量级web服务器,主要有负载均衡和反向代理的特性. 安装准备 nginx一些模块需要依赖lib库,所以先安装lib库,执行以下命令: [root@localhost local]# ...

  6. 前端性能优化的利器 ——— 浅谈JavaScript中的防抖和节流

    防抖和节流函数是工作中两种常用的前端性能优化函数,今天我就来总结一下什么是防抖和节流,并详细说明一下如何在工作中应用防抖和节流函数 什么是防抖和节流? 在 JavaScript 中,防抖(deboun ...

  7. react路由过渡动画效果

    render() { return ( <div> <li><Link to="/home">Home</Link></li& ...

  8. resttemplate调用

    Map<String, Object> queryForHttp(String url, Map<String, Object> header, Map<String, ...

  9. Django项目结构和子应用介绍

    项目结构 1.1.1 app项目配置 文件存放settings.py.urls.py.wsgi.py等 1.1.2 子应用配置 Migrations: 数据库模型的脚本,包括新增或更新了models的 ...

  10. Python连接Etcd集群基础教程

    1.背景介绍 最近接手了一个项目,项目是使用Python开发的,其中使用到了Etcd,但是项目之前开发的方式,只能够支持单节点连接Etcd,不能够在Etcd节点发生故障时,自动转移.因此需要基于现有e ...