2021-07-10:请返回arr中,求子数组的累加和,是<=K的并且是最大的。返回这个最大的累加和。
2021-07-10:请返回arr中,求子数组的累加和,是<=K的并且是最大的。返回这个最大的累加和。
福大大 答案2021-07-10:
时间紧。见代码。
时间复杂度:O(N*logN)。空间复杂度:O(N)。
代码用golang编写。代码如下:
package main
import (
"fmt"
"math"
"sort"
)
func main() {
arr := []int{1, 4, -3, 4, -5}
ret := getMaxLessOrEqualK(arr, 7000)
fmt.Println(ret)
}
// 请返回arr中,求个子数组的累加和,是<=K的,并且是最大的。
// 返回这个最大的累加和
func getMaxLessOrEqualK(arr []int, K int) int {
// 记录i之前的,前缀和,按照有序表组织
set := make([]int, 0)
map0 := make(map[int]struct{})
// 一个数也没有的时候,就已经有一个前缀和是0了
set = append(set, 0)
map0[0] = struct{}{}
max := math.MinInt64
sum := 0
// 每一步的i,都求子数组必须以i结尾的情况下,求个子数组的累加和,是<=K的,并且是最大的
for i := 0; i < len(arr); i++ {
sum += arr[i] // sum -> arr[0..i];
sort.Ints(set)
index := NearestIndex(set, sum-K)
if index != -1 {
max = getMax(max, sum-index)
}
if _, ok := map0[sum]; !ok {
set = append(set, sum) // 当前的前缀和加入到set中去
map0[sum] = struct{}{}
}
}
return max
}
func getMax(a int, b int) int {
if a > b {
return a
} else {
return b
}
}
// 在arr上,找满足>=value的最左位置
func NearestIndex(arr []int, v int) int {
L := 0
R := len(arr) - 1
index := -1 // 记录最左的对号
for L <= R {
mid := L + (R-L)>>1
if arr[mid] >= v {
index = mid
R = mid - 1
} else {
L = mid + 1
}
}
return index
}
执行结果如下:

2021-07-10:请返回arr中,求子数组的累加和,是<=K的并且是最大的。返回这个最大的累加和。的更多相关文章
- 【Data Structure & Algorithm】求子数组的最大和
求子数组的最大和 题目:输入一个整型数组,数组里有正数和负数.数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和.求所有子数组的和的最大值,要求时间复杂度为O(n).例如输入数组为1, - ...
- 算法进阶面试题07——求子数组的最大异或和(前缀树)、换钱的方法数(递归改dp最全套路解说)、纸牌博弈、机器人行走问题
主要讲第五课的内容前缀树应用和第六课内容暴力递归改动态规划的最全步骤 第一题 给定一个数组,求子数组的最大异或和. 一个数组的异或和为,数组中所有的数异或起来的结果. 简单的前缀树应用 暴力方法: 先 ...
- 求子数组的最大和要求O(n)
//求子数组的最大和 //输入一个整形数组.有整数也有负数,数组中连续一个或多个子数组,每一个子数组都有一个和,求全部子数组的和的最大值,要求时间复杂度O(n) #include<iostrea ...
- 【算法Everyday】第二日 求子数组的最大和
题目 // 3.求子数组的最大和 // 题目: // 输入一个整形数组,数组里有正数也有负数. // 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. // 求所有子数组的和的最大值. ...
- H面试(23):求子数组最大和
题目描述: 输入一个整形数组,数组里有正数也有负数. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 求所有子数组的和的最大值.要求时间复杂度为O(n). 例如输入的数组为1, -2 ...
- 基础作业 本周没上课,但是请大家不要忘记学习。 本周请大家完成上周挑战作业的第一部分:给定一个整数数组(包含正负数),找到一个具有最大和的子数组,返回其最大的子数组的和。 例如:[1, -2, 3, 10, -4, 7, 2, -5]的最大子数组为[3, 10, -4, 7, 2] 输入: 请建立以自己英文名字命名的txt文件,并输入数组元素数值,元素值之间用逗号分隔。 输出 在不删除原有文件内容
1丶 实验代码 #include<stdio.h> int main(void) { int tt,nn,i,j,c[11][11]; int flag=1; scanf("%d ...
- Dp解决数组中连续子数组的最大和
#include<iostream> ]; ;i<size;i++) { TempSum = CurSum; ) ...
- C#中求数组的子数组之和的最大值
<编程之美>183页,问题2.14——求子数组的字数组之和的最大值.(整数数组) 我开始以为可以从数组中随意抽调元素组成子数组,于是就有了一种想法,把最大的元素抽出来,判断是大于0还是小于 ...
- 数组中累加和小于等于k的最长子数组
问题描述: 给定一个无序数组arr,其中元素可正.可负.可0,给定一个整数 k.求arr所有的子数组中累加和小于或等于k的最长子数组长度.例如:arr=[3,-2,-4,0,6],k=-2,相加和小于 ...
- Task 4 求数组的连续子数组的最大和(团队合作)
小组成员:李敏.刘子晗 1.设计思想:由于已经做过这个题目,只要对之前的程序加上相应的测试和约束即可.我们两个人一起商议后,决定了程序的主框架和并列出了最终可以实现的功能.先要定义数组长度和上下限的变 ...
随机推荐
- eclipse console 控制台输出乱码解决办法
一.console输出日志显示乱码 二.在类编辑处点击右键 Run As --> Run Configurations 三.在Common中设置字符集 gbk 四.restart 搜索 复制
- [picoCTF]Scavenger Hunt write up
http://mercury.picoctf.net:5080/,这个网站周围隐藏着一些有趣的信息.你能找到它吗? 根据提示: 您应该有足够的提示来查找文件,不要运行暴力破解程序. 点击链接,进入页面 ...
- 实验2 数组、指针与C++标准库
实验任务5: Info.hpp #ifndef INFO_HPP #define INFO_HPP #include<iostream> #include<iomanip> # ...
- mysql zip安装步骤
1. 官网下载社区版 https://dev.mysql.com/downloads/mysql/ 版本5.7或者8.0 2. 解压到指定的目录. 3.创建my.ini文件,编辑内容: [mysqld ...
- DVWA-SQL Injection(SQL注入)
sql注入是典型.常见的Web漏洞之一,现在在网络中也可能存在,不过大多数为SQL盲注. 攻击者通过恶意的SQL语句来破坏SQL查询语句,达到数据库泄露的目的 LOW 审计源码 <?php // ...
- Maven项目的创建教程
1.创建Maven项目 首先File->New新建一个Maven项目,选择相应地址保存,点击CREATE完成新建 2.改成Web项目 右键选择Add Framework Support... 再 ...
- wxml2canvas爬坑之路
效果图: 前提: 公司要求生成一分报告并转为图片并保存,之前用canvas画过,但这次是在不想用canvas一点点画了,再往上找了n久,爬了n多坑,终于搞出来了 插件: wxml2canvas 一:下 ...
- 存算分离实践:JuiceFS 在中国电信日均 PB 级数据场景的应用
01- 大数据运营的挑战 & 升级思考 大数据运营面临的挑战 中国电信大数据集群每日数据量庞大,单个业务单日量级可达到 PB 级别,且存在大量过期数据(冷数据).冗余数据,存储压力大:每个省公 ...
- EF Code 如何应对高并发
1.高并发的情况,时常会发生数据不稳定的情况 在看本节内容之前,请先看上一章SqlServer 高并发的情况下,如何利用锁保证数据的稳定性 本节内容,也是具体讨论如何在EF中实现这些操作 2.场景模拟 ...
- MySQL与Java常用数据类型的对应关系
一.字符串数据类型: MySQL类型名 大小 用途 对应Java类名 char 0-255 bytes 定长字符串 (姓名.性别.学号) String varchar 0-65535 bytes 变长 ...