2024-06-26:用go语言,给定一个长度为n的数组nums和一个正整数k,

找到数组中所有相差绝对值恰好为k的子数组,

并返回这些子数组中元素之和的最大值。

如果找不到这样的子数组,返回0。

输入:nums = [-1,3,2,4,5], k = 3。

输出:11。

解释:好子数组中第一个元素和最后一个元素的差的绝对值必须为 3 。好子数组有 [-1,3,2] 和 [2,4,5] 。最大子数组和为 11 ,对应的子数组为 [2,4,5] 。

答案2024-06-26:

chatgpt

题目来自leetcode3026。

大体步骤如下:

1.初始化变量:设定初始答案 ans 为负无穷大(math.MinInt),创建一个空的 map minS 用来存储元素之和为某特定值的最小下标,初始化总和 sum 为 0。

2.遍历输入数组 nums:对于数组中的每个元素 x:

  • 查找 x+k 是否在 minS 中,如果在,则更新 ans 为 sum + x - minS[x+k] 与 ans 的最大值。

  • 查找 x-k 是否在 minS 中,如果在,则更新 ans 为 sum + x - minS[x-k] 与 ans 的最大值。

  • 查找 x 是否在 minS 中,如果不存在或者 sum 小于 minS[x],则更新 minS[x] 为 sum。

  • 更新当前总和 sum。

3.最终判断 ans 是否仍为负无穷大,如果是,则返回 0,否则将 ans 转换为 int64 类型后返回。

总的时间复杂度为 O(n),其中 n 为输入数组的长度。这是因为算法只需要一次遍历输入数组。

总的额外空间复杂度也是 O(n),因为使用了一个 map 来存储元素之和为特定值的最小下标,当输入数组中所有元素都不相差绝对值恰好为 k 时,map 中最多会存储 n 个元素。

Go完整代码如下:

package main

import (
"fmt"
"math"
) func maximumSubarraySum(nums []int, k int) int64 {
ans := math.MinInt
minS := map[int]int{}
sum := 0
for _, x := range nums {
s, ok := minS[x+k]
if ok {
ans = max(ans, sum+x-s)
} s, ok = minS[x-k]
if ok {
ans = max(ans, sum+x-s)
} s, ok = minS[x]
if !ok || sum < s {
minS[x] = sum
} sum += x
}
if ans == math.MinInt {
return 0
}
return int64(ans)
} func main() {
nums := []int{-1, 3, 2, 4, 5}
k := 3
fmt.Println(maximumSubarraySum(nums, k))
}

Python完整代码如下:

# -*-coding:utf-8-*-

def maximum_subarray_sum(nums, k):
ans = float('-inf')
min_s = {}
sum_val = 0 for x in nums:
if x + k in min_s:
ans = max(ans, sum_val + x - min_s[x + k]) if x - k in min_s:
ans = max(ans, sum_val + x - min_s[x - k]) if x not in min_s or sum_val < min_s[x]:
min_s[x] = sum_val sum_val += x if ans == float('-inf'):
return 0
return ans nums = [-1, 3, 2, 4, 5]
k = 3
print(maximum_subarray_sum(nums, k))

2024-06-26:用go语言,给定一个长度为n的数组nums和一个正整数k, 找到数组中所有相差绝对值恰好为k的子数组, 并返回这些子数组中元素之和的最大值。 如果找不到这样的子数组,返回0。 输的更多相关文章

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

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

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

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

  3. C语言:利用指针解决:统计一个长度为2的字符串在另外一个字符串中出现的次数。

    //统计一个长度为2的字符串在另外一个字符串中出现的次数. #include <conio.h> #include <stdio.h> #include <string. ...

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

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

  5. 最接近的三数之和(给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数, 使得它们的和与 target 最接近。返回这三个数的和)

    例如,给定数组 nums = [-1,2,1,-4], 和 target = 1. 与 target 最接近的三个数的和为 2. (-1 + 2 + 1 = 2). 思路:首先对数组进行排序     ...

  6. 算法进阶面试题02——BFPRT算法、找出最大/小的K个数、双向队列、生成窗口最大值数组、最大值减最小值小于或等于num的子数组数量、介绍单调栈结构(找出临近的最大数)

    第二课主要介绍第一课余下的BFPRT算法和第二课部分内容 1.BFPRT算法详解与应用 找到第K小或者第K大的数. 普通做法:先通过堆排序然后取,是n*logn的代价. // O(N*logK) pu ...

  7. 剑指Offer-连续子数组中的最大和

    题目 输入一个整型数组,数组里有正数也有负数.数组中的一个或连续多个整数组成一个子数组.求所有子数组的和的最大值.要求时间复杂度为 O(n). 输入 [1,-2,3,10,-4,7,2,-5] 返回值 ...

  8. 【LeetCode】 907 子数组的最小值之和

    Decrisption Given an array of integers arr, find the sum of min(b), where b ranges over every (conti ...

  9. [Swift]LeetCode907. 子数组的最小值之和 | Sum of Subarray Minimums

    Given an array of integers A, find the sum of min(B), where B ranges over every (contiguous) subarra ...

  10. 给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案

    var threeSumClosest = function(nums, target) { let ans = nums[0] + nums[1] + nums[2]; const len = nu ...

随机推荐

  1. keil 中未编译的代码灰色显示

    一.转载文章 转载:KEIL,#ifdef宏定义下失效代码差异性显示 注意keil的版本,太低的版本不具备灰色显示,据我所知在KEIL uVersion V5.31版本以上均可以. 二.使能灰色显示 ...

  2. 007_Orcad运用Excel表格创建复杂元器件

    007_Orcad运用Excel表格创建复杂元器件 以AD9135为例,有88个引脚,如果一个一个输入引脚名,比较慢.用Excel做出引脚列表,比较快捷. 首先需要查询datasheet,用Solid ...

  3. .NET Emit 入门教程:第七部分:实战项目1:将 DbDataReader 转实体

    前言: 经过前面几个部分学习,相信学过的同学已经能够掌握 .NET Emit 这种中间语言,并能使得它来编写一些应用,以提高程序的性能. 随着 IL 指令篇的结束,本系列也已经接近尾声,在这接近结束的 ...

  4. zabbix API笔记

    python简单demo 输出id为111主机的主机群组信息 import requests import json request_headers = {"Content-Type&quo ...

  5. Oracle细粒度审计策略

    场景:经常需要查看某些表做了哪些操作. Oracle中,可以添加细粒度策略来获取,如下: begin dbms_fga.add_policy(object_schema => 'portxx', ...

  6. 03.Java 基础语法

    1. 注释.标识符.关键字 三种注释 单行注释:// 多行注释:/* 多行注释 */ 文档注释: /** * @Description HelloWorld * @Author xxx */ 标识符 ...

  7. Ubuntu开启root账户登陆

    Ubuntu开启root账户登陆 设置 root 密码:sudo passwd root sudo chmod 777 /usr/share/lightdm/lightdm.conf.d/50-xx ...

  8. C 语言编程 — 基本语法

    目录 文章目录 目录 前文列表 C 语言 C 语言的版本 C 语言的特点 C 语言的优点 C 语言的缺点 搭建编程环境 基本语法 前文列表 <程序编译流程与 GCC 编译器> C 语言 C ...

  9. 使用systemctl管理服务(nginx)

    首先调整好路径信息,修改配置文件vim /usr/lib/systemd/system/nginx.service [Unit]Description=The nginx HTTP and rever ...

  10. go高并发之路——go语言如何解决并发问题

    一.选择GO的原因 作为一个后端开发,日常工作中接触最多的两门语言就是PHP和GO了.无可否认,PHP确实是最好的语言(手动狗头哈哈),写起来真的很舒爽,没有任何心智负担,字符串和整型压根就不用区分, ...