分治法—最大子段问题

cs 复制代码
#include<stdio.h>
#include<stdlib.h>
//分治法
//最大子段问题
int Maxsubsum(int* Array, int left, int right)
{
	int sum = 0,i;
	//当array只有一个元素的时候
	if (left == right)
	{
		if (Array[left] > 0) {
			sum = Array[left];
		}
		else
		{
			sum = 0;
		}
	}
	else
	{
		int center = (left + right) / 2;
		int leftsum = Maxsubsum(Array, left, center);
		int rightsum = Maxsubsum(Array, center + 1, right);
		int s1 = 0;
		int lefts = 0;
		for (i = center;i >= left; i--)
		{
			lefts = lefts + Array[i];
			if (lefts>s1)
			{
				s1 = lefts;
			}
		}
		int s2 = 0;
		int rights = 0;
		for (i = center + 1; i <= right; i++)
		{
			rights = rights + Array[i];
			if (rights>s2)
			{
				s2 = rights;
			}
		}
		sum = s1 + s2;//最大子段问题的第三种情况
		
		//第一种情况
		if (sum < leftsum)
		{
			sum = leftsum;
		}
		//第二种情况
		if (sum < rightsum)
		{
			sum = rightsum;
		}
	}
	return sum;
}
int main()
{
	int* Array = (int*)malloc(6 * sizeof(int));
	Array[0] = -2;
	Array[1] = 11;
	Array[2] = -4;
	Array[3] = 13;
	Array[0] = -5;
	Array[0] = -2;
  	int result = Maxsubsum(Array, 0, 5);
	printf("%d", result);
	return 0;
}

时间复杂度为:O(nlogn)

相关推荐
KaMeidebaby1 小时前
卡梅德生物技术快报|组蛋白乙酰化修饰调控动脉粥样硬化的分子机制及中药表观干预研究
网络·人工智能·网络协议·tcp/ip·算法
Galerkin码农选手1 小时前
awq_marlin和gptq_marlin量化算法简要介绍
算法
buhuizhiyuci1 小时前
【算法篇】动态规划——斐波那契数列模型
算法·动态规划
rick9771 小时前
C# 动态对象实战:用 DynamicObject 打造你的"万能插件架构"
c#
棱镜研途1 小时前
学习笔记丨模式识别与机器学习5大核心赛道解析(IC-IPPR 2026)
人工智能·神经网络·算法·机器学习·模式识别·学术会议·智能计算
SuperHeroWu71 小时前
【算法】逻辑回归虽然名字中有“回归“,但通常用于二分类任务。如何理解学习?
算法·回归·逻辑回归·二分类任务
gCode Teacher 格码致知1 小时前
Python教学:十六进制编码的显示方法-由Deepseek产生
开发语言·python·算法
05候补工程师1 小时前
【408数据结构】核心考点:图(Graph)精炼笔记与算法直觉
数据结构·经验分享·笔记·考研·算法·图论
靠沿1 小时前
【动态规划算法】专题三——简单多状态dp问题
算法·动态规划