寻找最大的子串(分治法)

分治法之最大子串的和 题目描述 给定一个无序的整数序列,求出该序列中的连续字串的最大和。(该序列中一定包含负数,否则没有意义) 例子:{10,31,-41,59,26,-53,58,97,-93,-23,84} 该序列的子序列的最大和为187 = =59+26+(-53)+58+97 解题思路 1、这道题用分治法做的话,可以分解成 1)确定中间值mid. 2)求mid左子序列的最大和。 3)求mid右子序列的最大值。 ... 阅读详情

O(nlgn)

#!/usr/bin/python

'''file name: maxsum.py
   --P71
   --find maximum subarray sum, divide-and-conquer O(nlng)
   --author: zevolo, 2012.05.11
'''

def find_max_across_mid(list, low, high, mid):
    ret = list[mid]
    right = mid
    sum = ret 
    for i in range(mid + 1, high + 1):
        sum = sum + list[i]
        if sum > ret:
            ret = sum 
            right = i 
    left = mid
    for i in range(mid - 1, low - 1, -1):
        sum = sum + list[i]
        if sum > ret:
            ret = sum
            left = i
    return left, right, ret
        
    
def find_max_sum(list, low, high):
    if high == low:
        return (low, high, list[low])
    
    mid = (low + high) / 2
    (l_low, l_high, l_sum) = find_max_sum(list, low, mid)
    (r_low, r_high, r_sum) = find_max_sum(list, mid + 1, high)
    (m_low, m_high, m_sum) = find_max_across_mid(list, low, high, mid)

    sum = max(l_sum, r_sum)
    sum = max(sum, m_sum)
    s_low = r_low
    s_high = r_high
    if sum == l_sum:
        s_low = l_low
        s_high = l_high
    elif sum == m_sum:
        s_low = m_low
        s_high = m_high
        
    return (s_low, s_high, sum)

if __name__ == '__main__':
    l = [1, -2, 3, 10, -4, 7, 2, -5]
    print l
    (low, high, sum) = find_max_sum(l, 0, len(l) - 1)
    out = l[low:high+1]
    print (out, sum)


最大子串和 最大子串和 问题描述:    给定n个整数(可能为负数)组成的序列a[1],a[2],a[3],…,a[n],求该序列如a[i]+a[i+1]+…+a[j]的子段和的最大值。当所给的整数均为负数时定义子段和为0,依此定义,所求的最优值为: Max{0,a[i]+a[i+1]+…+a[j]},1 算法: 1、暴力法。(复杂度O(n2))      略。 2、分治法。(复杂度O(nlo 阅读详情

相关推荐

字符串的最大递增子串

字符串的最大递增子串

天地正气,古今完人 2657

L - Tree dfs,E - Find Maximum

L - Tree dfs,E - Find Maximum

weixin_52621204的博客 808

前端练习10 连续子串最大和

求连续子串最大和的练习。

多啦的博客 1118

leetcode53最大连续子串——分治算法C语言实现-参考(Mark Allen Weiss数据结构与算法分析)

核心思路: 分治算法:将问题规模缩小—采用的是递归 最大子串存在于:分界点的 左侧或 右侧或 位于左右两部分之中---保证前后两个部分是连续的---通过前半部分的最大(包含前半部分的最后一个元素)和和后半部分最大和相加(包含后部分的第一个元素) /** * 最大子序列可能出现在序列分界点的 * 左侧或 * 右侧或 * 位于左右两部分之中---保证前后两个部分是连续的---通过前半部分的...

qq_42664961的博客 361

Alphafold2/multimer Conda环境配置与GPU加速优化指南

本文详细介绍了如何在本地服务器或工作站上,通过Conda环境配置并优化GPU加速来部署Alphafold2及其多聚体版本Alphafold2-multimer。内容涵盖从硬件准备、依赖安装、数据库部署到实战预测与常见报错处理的全流程,重点解决了本地安装过程中的依赖冲突与GPU调用失败等关键问题,帮助研究人员高效运行这一蛋白质结构预测工具。

neovim7hacker的博客 470

AI智能体安全沙箱agentguard:为LLM代码执行筑起防火墙

在AI应用开发领域,大语言模型(LLM)驱动的智能体(Agent)能够自动生成并执行代码,极大地提升了自动化能力。然而,赋予AI直接执行系统命令的权限也带来了显著的安全风险,如恶意代码注入、敏感数据泄露和系统资源滥用。为了解决这一核心矛盾,安全沙箱技术应运而生,它通过在不可信代码与宿主系统之间建立隔离层,实现"默认拒绝、最小权限"的安全原则。agentguard项目正是这一理念的工程实践,它结合白名单机制与容器化隔离,为AI智能体提供了可配置、可审计的安全执行环境。该方案不仅适用于内部自动化工具开发,也为构

weixin_28695537的博客 297

分治法——最大子序和(Leetcode 53)

原题如下: 1、先简单记录一下动态规划算法: 找到公式: dp[i]=max(dp[i-1]+nums[i],nums[i]) 其中dp[i]表示以nums[i]结尾的最大连续和。 这个公式就理解成: 对于当前这个数字,要么前面的对你有益,你加上; 要么前面对你无益,你不需要前面的。 所以,最后再额外使用一个空间,用来保留目前为止认为的最大值即可。 2、分治法 分治法,问题划分成子问...

七夕的博客 2084

LaTeX双栏浮动结构实战:用dblfloatfix解决跨栏图表排版难题

本文深入探讨了LaTeX双栏浮动结构在学术论文排版中的常见问题,特别是IEEE会议论文中的跨栏图表定位难题。通过介绍dblfloatfix包的整合解决方案,帮助用户实现精准的底部定位和浮动顺序保持,提升排版效率与质量。

weixin_30872499的博客 443

maximum-subarray(分治求最大连续子串和)

https://www.nowcoder.com/practice/32139c198be041feb3bb2ea8bc4dbb01?tpId=46&tqId=29126&tPage=1&rp=1&ru=/ta/leetcode&qru=/ta/leetcode/question-ranking 思路:分治思想,把整个数组从中间劈开成两段,那么最大子串和...

qq_40722582的博客 625

AutoSAR系列讲解(入门篇)2.4-Runnables可运行实体

讲解一下Runnable和其工程的实际映射

雪云飞星的博客 3万+

ContextCapture系列教程(三):大疆精灵4RTK版无人机POS数据提取、处理(处理后勉强达到免相控要求)

大疆精灵 Phantom 4 RTK于2018年发布,是大疆为高精度建图与精准飞行设计的行业级无人机,在精灵4无人机外形的基础上,机身增加了RTK模块,可以实现高精度 RTK 定位导航,相机与 RTK 系统采用微秒级时间同步,可以通过app 进行航线规划飞行

pausau的博客 1万+

【Leetcode】寻找数串中连续最大整数和且最大长度的子串

寻找数串中连续最大整数和且最大长度的子串 输入示例: 1000 -100 200 -200 10

xhyzjiji的专栏 946

SAP_SD模块-销售批次策略应用记录

SAP_SD模块-销售批次策略完整案例

风沙的博客 2611

LeetCode刷题——分治法(C/C++)

【代码】LeetCode刷题——分治法(C/C++)

jhin_lx的博客 633

【数据集】中国各类水文专业常用数据集合集

对中国各类水文专业常用数据集进行整理并总结

WW、forever的博客 9307

YOLO11实战优化:暗光环境检测 | 引入Retinex增强模块与YOLO11联合训练,解决夜间/低照度场景抓拍痛点

本文探讨了暗光环境下目标检测的技术挑战与解决方案。研究发现,传统CNN模型在低照度条件下性能显著下降,主要由于光子数减少导致信噪比降低、目标特征被噪声淹没。针对这一问题,文章提出将可微分光照增强模块嵌入YOLO检测器的技术路线,重点分析了Retinexformer+YOLO11联合方案的优势。 文章对比了YOLO系列模型在暗光场景的表现,指出YOLO11凭借其C3k2模块、无锚检测头和多任务统一骨干网络,在低对比度图像特征提取方面优于前代产品。同时详细介绍了Retinexformer的理论基础和技术创新,包

2601_95807009的博客 206

Maximin of substring

 本文该处了最大字段和问题的朴素算法,分治法,动态规划法的实现.  /**//*  * Description: a directing approach   * name: sum_of_substring  * parameters: string: string to calculate the maximun sum.  *             len   : the le

BigBear's Tech. Blog 483

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

LeetCode 53. Maximum Subarray

题目题目地址题目要求找出和最大的子串,比如[-2,1,-3,4,-1,2,1,-5,4],那么所求子串为[4,-1,2,1],和为6。分析本题是个简单题,但是思路也不大明显。可以考虑用分治法,对于任何一个序列都可以一分为二,左子序列的maxSum和右子序列的maxSum可以递归求出,当然不要忘了,还有一种是跨越左右子序列的子序列的maxSum,所求的和就是三者求最大值。前两种情况可以简单解决,对于第

zdinanyang的博客 334

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

趣味算法:滑动窗口算法的理解与应用

在编程和数据结构中,滑动窗口算法是一种常见的解决问题的方法。它主要用于处理涉及连续或固定长度子数组、子序列或子字符串的问题。本文将深入探讨滑动窗口算法,包括其基本概念、应用场景、基本步骤以及具体的Java代码实践。滑动窗口算法是一种优化技巧,主要用于解决数组或链表中的子序列或子串问题。其主要优势是能够将一些复杂问题的时间复杂度降低至线性。滑动窗口是一种高效的算法优化策略,适用于解决各种需要处理连续子序列或子数组问题的场景。

沐雨风栉 3028

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

【dfs+分治】VK Cup 2012 Round 1-C. Abracadabra

这道题的思路真是太神奇了,在参考某大牛的代码后恍然大悟,对其思维无限膜拜啊……用了分治法,具体思路看代码…… 题目 #include using namespace std; template T Max(T x,T y){return x>y?x:y;} template T Min(T x,T y){return x<y?x:y;} int dfs(int l1,int r1,int

AndRing的专栏 661

395. 至少有 K 个重复字符的最长子串 分治或者滑动窗口

思路 分治的解法 明白这么的一个基本的事实,给定一个字符串s,如果s中存在一个字符c,这个字符c在整个s中出现的次数<k,那么我们所要求得最长字串必定不包含这个这个字符c,于是我们便可以把这个字符串从c这个字符开始分成若干个部分,对这个若干个部分重复上面得操作,进行分治。 和一般分治得一点变形就是这个分治划分子问题的方法,需要想到这一点。 执行用时:0 ms, 在所有 C++ 提交中击败了100.00%的用户 内存消耗:6.4 MB, 在所有 C++ 提交中击败了60.95%的用户

shen253135371的博客 246

C++面试总结之算法(四):数组

1.栈用数组怎么实现 #defineMAXSIZE10; template<classT> classStack{ public://默认构造函数 Stack(); Stack(size_tmaxElements); Stack(Tdata[],size_tmaxElme...

lxin_liu的博客 441

模板

1点分治 //给一棵树,每条边有权。求一条简单路径,权值和等于 kk,且边的数量最小。 //第一行包含两个整数 n,k,表示树的大小与要求找到的路径的边权和。 //接下来的n-1行,每行三个整数u, v, w。两个点,和它们的边权 #include<iostream> #include<algorithm> #include<cstdio> #include<map> #include<cmath> #include<vector&gt

sunnyorrainy的博客 201

数组字符串那些经典算法:最大子序列和,最长递增子序列,最长公共子串,最长公共子序列,字符串编辑距离,最长不重复子串,最长回文子串

作者:寒小阳 时间:2013年9月。 出处:http://blog.youkuaiyun.com/han_xiaoyang/article/details/11969497。 声明:版权所有,转载请注明出处,谢谢。 0、前言         这一部分的内容原本是打算在之后的字符串或者数组专题里面写的,但看着目前火热进行的各家互联网公司笔试面试中,出现了其中的一两个内容,就随即

zhangzhengyuan123123的专栏 820

数组字符串那些经典算法:最大子序列和,最长递增子序列,最长公共子串,最长公共子序列,字符串编辑距离,最长不重复子串,最长回文子串 (转)...

作者:寒小阳 时间:2013年9月。 出处:http://blog.youkuaiyun.com/han_xiaoyang/article/details/11969497。 声明:版权所有,转载请注明出处,谢谢。 0、前言 这一部分的内容原本是打算在之后的字符串或者数组专题里面写的,但看着目前火热进行的各家互联网公司笔试面试中,出现了其中的一两个内容,就随即...

weixin_34144848的博客 115
上一篇: 计算逆序对的个数
下一篇: 寻找最大子串(线性方法)
zevolo
博客等级 码龄18年 17粉丝 47原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值