分治求解最大子数组

分治求解最大子数组

分治求解步骤

  1. :将数组分成左右两部分
  2. :递归地求解左半部分和右半部分的最大子数组
  3. :计算跨越中点的最大子数组,并取三者中的最大值

具体实现

  1. 分:

    将数组A分成两部分

    左半部分:从low到mid

    右半部分:从mid+1 到high

    mid为low+high的中点

  2. 递归求解左半部分和右半部分的最大子数组

  3. 计算跨越中点的最大子数组。这需要从中点县向左和向右分别扩展,找到包括中点的最大子数组

#include <limits.h>
#include <stdio.h>int findMaxCrossingSubarrary(int A[], int low, int mid, int high, int *maxLeft, int * maxRight)
{int leftSum = INT_MIN;int sum = 0;int i;for(i = mid; i >= low; i--){sum += A[i];if(sum > leftSum){leftSum = sun;*maxLeft = i;}}
}int findMaxSubarrary(int A[], int low, int high, int *maxLeft, int *maxRight)
{if(low == high){*maxLeft = low;*maxRight = high;return A[low];}else{int mid = (low + high) / 2;int leftLow, leftHigh, rightLow, rightHigh, crossLow, crossHigh;int leftSum = findMaxSubarrary(A, low, mid, &leftLow, &leftHigh);int rightSum = findMaxSubarrary(A, mid + 1, high, &rightLow, &rightHigh);int crossSum = findMaxCrossingSubarrary(A, low, mid, high, &crossLow, &crossHigh);if(leftSum >= rightSum && leftSum >= crossSum){*maxLeft = leftLow;*maxRight = leftHigh;return leftSum;}else if(rightSum >= leftSum && rightSum >= crossSum){*maxLeft = rightLow;*maxRight = rightHigh;return rightSum;}else{*maxLeft = crossLow;*maxRight = crossHigh;return crossSum;}}
}int main()
{int A[] = {13, -3, -25, 20, -3, -16, -23, 18, 20, -7, 12, -5, -22, 15, -4, 7};int n = sizeof(A) / sizeof(A[0]);int low = 0;int high = n - 1;int maxLeft, maxRight;int maxSum = findMaxSubarrary(A, low, high, &maxLeft, &maxRight);printf("maximum subarry: [%d, %d] with sum %d\n", maxLeft, maxRight, maxSum);return 0;
}

:在 findMaxSubarray 函数中,通过计算 mid 将数组分成左右两部分。

:递归调用 findMaxSubarray 函数分别求解左半部分和右半部分的最大子数组。

:调用 findMaxCrossingSubarray 函数计算跨越中点的最大子数组。将左右两部分和跨越中点的最大子数组中的最大值作为结果返回

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/39654.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

专业的TPM管理咨询公司有哪些特点?

专业的TPM管理咨询公司&#xff0c;作为现代企业管理和设备维护的重要合作伙伴&#xff0c;其特点不仅体现在技术能力和服务质量上&#xff0c;更在于其独特的经营理念和方法论。以下是专业TPM管理咨询公司所具备的显著特点&#xff1a; 一、全面的技术实力与深厚的行业经验 专…

迎接AI時代的新篇章:GPT-5 技術突破與未來展望

GPT-5 一年半後發布&#xff1f;對此你有何期待&#xff1f; 前言 在美國達特茅斯工程學院的一次採訪中&#xff0c;OpenAI 首席技術官米拉穆拉蒂透露&#xff0c;GPT-5 將在一年半後發布&#xff0c;並將其描述為從高中生智力水平躍升到博士生水平的飛躍。這一消息在科技界引…

Lambda表达式讲解

简介: Lambda表达式的使用场景非常广泛,主要包括函数式编程、集合操作、排序、线程编程、GUI事件处理、数据处理、Web开发等。 函数式编程:Lambda表达式是函数式编程的重要特性,可以用于替代传统的匿名内部类,简化代码,提高可读性。 集合操作:Lambda表达式可以与集合…

word 转pdf 中图片不被压缩的方法

word 转pdf 中图片不被压缩的方法 法1&#xff1a; 调节word 选项中的图片格式为不压缩、高保真 法2&#xff1a; 1: word 中的图片尽可能使用高的分辨率&#xff0c;图片存为pnd或者 tif 格式&#xff08;最高清&#xff09; 2: 转化为pdf使用打印机器&#xff0c;参数如下…

展开说说:Android四大组件之Service使用

Service一定要开启子线程才可以执行耗时任务吗&#xff1f;不完全是吧。 Service是Android系统中的四大组件之一&#xff0c;它是一种没有可视化界面&#xff0c;运行于后台的一种服务程序。属于计算型组件&#xff0c;用来在后台执行持续性的计算任务&#xff0c;重要性仅次于…

分子AI预测赛笔记

#AI夏令营 #Datawhale #夏令营 Taks1 跑通baseline 根据task1跑通baseline 注册账号 直接注册或登录百度账号&#xff0c;etc fork 项目 零基础入门 Ai 数据挖掘竞赛-速通 Baseline - 飞桨AI Studio星河社区 启动项目 选择运行环境&#xff0c;并点击确定&#xff0c;没…

台灯学生用哪个牌子最好?学生用台灯品牌排行榜分析

台灯学生用哪个牌子最好&#xff1f;护眼台灯在近年来成为家长和长时间使用电子设备人群关注的家电/学生产品。对于家中有孩子或经常面对电子屏幕的人士来说&#xff0c;很多人可能已经对这类产品有所了解并进行了购买。然而&#xff0c;部分家长对护眼台灯的认识还不够深入&am…

不同类型uORF对mORF翻译效率的影响

在您提供的文献《不同类型的uORF在真核生物基因表达中的调控潜力》中&#xff0c;对于不同类型的起始密码子的uORF及其对下游主开放阅读框&#xff08;mORF&#xff09;翻译效率的影响进行了详细的讨论。以下是这些影响的主要总结&#xff1a; uORF的起始密码子类型&#xff1a…

FFT 简单基础(matlab

使用 fs 进行采样&#xff0c;进行 N点FFT 选择显示0~N/21点的幅值 横坐标对应频率计算公式&#xff1a; fs * n / N 举个梨子&#xff1a; 频率2kHz采样1s&#xff0c;得到2000个点的序列y(n) 对序列y(n)做4096点的FFT 幅值响应对应的横坐标频率…

机器人控制系列教程之Stewart平台简介和运动学分析

Stewart平台简介及应用场景 六自由度 Stewart 并联机器人结构简图如下图所示&#xff0c;主要有一个固定平台和一个移动平台以及六个可伸缩的推杆组成&#xff0c;通常情况下&#xff0c;固定平台与底座连接&#xff0c;移动平台在空间具有六个自由度&#xff0c;通过六个推杆…

数据结构——求两个数的最大公因子

#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> 数据结构——求两个数的最大公因子 要求&#xff1a;必须采用递归和非递归两种方法 非递归&#xff1a; int main() { int a 0; int b 0; scanf("%d %d", &a, &b); int c a…

攻防演练,怎么扫描一个网站

在 Ubuntu 22.04 上&#xff0c;你可以使用多种扫描工具来进行网站扫描。以下是一些常见的扫描工具以及它们的安装方法&#xff1a; Nmap: Nmap 是一个开源的网络扫描工具&#xff0c;用于发现网络和安全审计。安装命令&#xff1a;sudo apt update sudo apt install nmapNikto…

价格很实惠,希喂、爱立方、生生不息主食冻干抗得住实测吗?

在挑选主食冻干时&#xff0c;许多宠物主人都会感到头疼。尽管主食冻干相较于普通猫粮具有诸多优势&#xff0c;但其价格也相对高昂。这导致许多宠物主人担心高价购买的主食冻干可能营养价值并不理想。然而&#xff0c;在选择时&#xff0c;我们还需要考虑其他重要因素&#xf…

Spring MVC 中 使用 RESTFul 实现用户管理系统

1. Spring MVC 中 使用 RESTFul 实现用户管理系统 文章目录 1. Spring MVC 中 使用 RESTFul 实现用户管理系统2. 静态页面准备2.1 user.css2.2 user_index.html2.3 user_list.html2.4 user_add.html2.5 user_edit.html 3. SpringMVC环境搭建3.1 创建module&#xff1a;usermgt3…

tapd 与国内外主流的8大项目管理软件大对比

对比Tapd与8大项目管理工具&#xff1a;PingCode、Worktile、Redmine、Teambition、广联达、Jira、禅道、飞书。 Tapd 是腾讯推出的一款敏捷开发管理工具&#xff0c;特别适合那些需要高效协作和快速迭代的敏捷开发团队。它支持多种敏捷方法论&#xff0c;包括Scrum和Kanban&am…

《详细指南:本地部署Ollama大型模型的完整步骤》

《详细指南&#xff1a;本地部署Ollama大型模型的完整步骤》 引言 Ollama是一个高性能的AI模型部署平台&#xff0c;支持在本地轻松部署大型语言模型。本指南将详细介绍如何在本地环境中部署Ollama&#xff0c;并运行一个大型模型。 环境要求 操作系统&#xff1a;Windows/…

数学建模------Matlab数据可视化

目录 1.plot函数 &#xff08;1&#xff09;函数介绍 &#xff08;2&#xff09;参数介绍 &#xff08;3&#xff09;图形美化 &#xff08;4&#xff09;背景更改 &#xff08;5&#xff09;多组绘制 &#xff08;6&#xff09;图形叠加 &#xff08;7&#xff09;添加…

Elasticsearch备份数据到本地,并导入到新的服务 es 服务中

文章目录 使用elasticsearch-dump工具备份安装node.js(二进制安装)解压设置环境变量安装elasticsearch-dump docker安装使用ES备份文件到本地 使用elasticsearch-dump工具备份 这个工具备份时间比较长 安装node.js(二进制安装) wget https://nodejs.org/dist/v16.18.0/node-…

C语言 求分数序列的和

求分数序列2/1&#xff0c;3/2&#xff0c;5/3&#xff0c;8/5&#xff0c;13/8&#xff0c;21/13…。求出数列的n项和&#xff0c;n由键盘输入&#xff0c;并计算n20的结果 这个程序计算分数序列的前 n 项和&#xff0c;并输出 n 20 时的结果。 #include <stdio.h>in…

华为机试HJ13句子逆序

华为机试HJ13句子逆序 题目&#xff1a; 将一个英文语句以单词为单位逆序排放。例如“I am a boy”&#xff0c;逆序排放后为“boy a am I”所有单词之间用一个空格隔开&#xff0c;语句中除了英文字母外&#xff0c;不再包含其他字符 想法&#xff1a; 将输入的字符串通过…