惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

罗磊的独立博客
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
博客园 - 三生石上(FineUI控件)
Hugging Face - Blog
Hugging Face - Blog
小众软件
小众软件
量子位
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
IT之家
IT之家
V
V2EX
阮一峰的网络日志
阮一峰的网络日志
爱范儿
爱范儿
人人都是产品经理
人人都是产品经理
博客园 - Franky
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园_首页
V
Visual Studio Blog
Last Week in AI
Last Week in AI
有赞技术团队
有赞技术团队
WordPress大学
WordPress大学
博客园 - 司徒正美
大猫的无限游戏
大猫的无限游戏
博客园 - 【当耐特】
MyScale Blog
MyScale Blog
月光博客
月光博客

博客园 - 晓岚

2023年最后一天:有收获有遗憾 2021年最后一晚:蛰伏的一年 2020年最后一晚:变局中的一年 2019年最后一晚:四处把抓的一年 2018年最后一小时 2017年最后一小时 2016年最后一晚上 2015年最后半小时 2014年第一小时 洛杉矶留念 2013年最后一小分钟 2012年总结&2013展望 向岁月致敬 对未来憧憬 2011年最后一小时 2010年最后一小时 2008年的最后一分钟 修改HuiHuo工序的上道工序的IFV为1 Status Code Definitions --Hypertext Transfer Protocol -- HTTP/1.1 利用客户端代理和SOAPHeader进行Webservice权限控制 Javascript中Eval函数的使用 - 晓岚 - 博客园 软件素质历练
子数组的最大和 最大子数组
晓岚 · 2008-05-30 · via 博客园 - 晓岚

/*
 * 求连续的子数组的和为最大数组及其和
 * 要求:
 * 1.只求子数组,不包含子数组为全集的情况
 * 2.本算法考虑了数组和一直递减趋势的情况
 * 3.本算法考虑了数组和一直递增趋势的情况
 * C# auto indent Ctrl+A -> Ctrl+K -> Ctrl+F
 * 
 * 
 * 
*/

using System;
using System.Collections.Generic;
using System.Text;

namespace Design_Pattern.Observer
{
    
public class MaxArray
    
{
        
private static int maxsum;
        
public static void Main(String[] args)
        
{
            
int[] array = 1-2310-472-5 };
            
//int[] array = { 1, -9, -10};
            
//int[] array = { 1, 0, 2 };
            int[] m = new int[array.Length];
            m[
0= array[0];
            List
<int> maxsubarray = new List<int>();
            MaxArray.findMaxSubArray(array, m, 
ref maxsubarray);

            Console.Write(
"max sub array:");
            
// 这里考虑m[0]时最大值的情况,即这个数组整体趋势递减
            if (maxsum == m[0])
            
{
                Console.Write(m[
0]);
            }

            
else
            
{
                
// 这里的maxsubarray不包含m[0]也可以为递增作贡献的情况 所以当数组为{ 1, 0, 2 }结果不正确
                
// 可加上这层处理
                foreach (int item in maxsubarray)
                
{
                    Console.Write(item 
+ " ");
                }

            }

            
            Console.ReadLine();
        }

        
public static void findMaxSubArray(int[] array, int[] m, ref List<int> maxsubarray)
        
{
            
// 包含子数组为全集 注意边界 不是array.Length-1
            int n = array.Length;
            m[
0= array[0];
            
for (int i = 1; i < n; i++)
            
{
                
if (m[i - 1< 0)
                
{
                    m[i] 
= array[i];
                }

                
else
                
{
                    m[i] 
= m[i - 1+ array[i];
                    maxsubarray.Add(array[i]);
                }


            }


            Console.WriteLine(
"the max sum for sub array:");
            Console.WriteLine(MaxArray.GetArrayMax(m));

            Console.WriteLine(
"new sum array m:");
            
foreach (int item in m)
            
{
                Console.Write(item 
+ " ");

            }

            Console.WriteLine();
        }


        
public static int GetArrayMax(int[] array)
        
{
            
int max = array[0];
            
foreach (int  item in array)
            
{
                
if (item > max)
                
{
                    max 
= item;
                }

            }

            maxsum 
= max;
            
return max;
        }

    }

}