温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

找出给定数数组里连续的元素和的最大值

发布时间:2020-06-14 11:39:02 来源:网络 阅读:446 作者:fyifei05580558 栏目:开发技术
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication4
{
    class Program
{
        static void Main(string[] args)
{
            FindMaxAmountValue rr = new FindMaxAmountValue();
           // Random r = new Random();

            int[] list=new int[]{-22,-11, 0, 0,0,0};
            for (int i = 0; i < list.Length; i++)
{
                Console.Write(list[i] + " ");
}
            int maxTotalValue=0;
            rr.FindMaxA(list,out maxTotalValue);
            Console.WriteLine("got subTotal: {0}", maxTotalValue);
           list = new int[] {0, 0, 0, 0 };
            for (int i = 0; i < list.Length; i++)
{
                Console.Write(list[i] + " ");
}
maxTotalValue = 0;
            rr.FindMaxA(list, out maxTotalValue);
            Console.WriteLine("got subTotal: {0}", maxTotalValue);
            list = new int[] { -22, -33, -1, -10 };
            for (int i = 0; i < list.Length; i++)
{
                Console.Write(list[i] + " ");
}
maxTotalValue = 0;
            rr.FindMaxA(list, out maxTotalValue);
            Console.WriteLine("got subTotal: {0}", maxTotalValue);
 
            list = new int[] { 22, -33, -100, -10 };
            for (int i = 0; i < list.Length; i++)
{
                Console.Write(list[i] + " ");
}
maxTotalValue = 0;
            rr.FindMaxA(list, out maxTotalValue);
            Console.WriteLine("got subTotal: {0}", maxTotalValue);
 
            list = new int[] { 22, -33, -100, -10, 19, 18, 13, 25, 21 };
            for (int i = 0; i < list.Length; i++)
{
                Console.Write(list[i] + " ");
}
maxTotalValue = 0;
            rr.FindMaxA(list, out maxTotalValue);
            Console.WriteLine("got subTotal: {0}", maxTotalValue);
            list = new int[] { -22, -33, -100, -10, 19, 18, 13, 25, 21 };
            for (int i = 0; i < list.Length; i++)
{
                Console.Write(list[i] + " ");
}
maxTotalValue = 0;
            rr.FindMaxA(list, out maxTotalValue);
            Console.WriteLine("got subTotal: {0}", maxTotalValue);
            list = new int[] { 22, -33, -100, -10, 19, 18, 13, 25, 21, -21 };
            for (int i = 0; i < list.Length; i++)
{
                Console.Write(list[i] + " ");
}
maxTotalValue = 0;
            rr.FindMaxA(list, out maxTotalValue);
            Console.WriteLine("got subTotal: {0}", maxTotalValue);
}

}
 
    public class FindMaxAmountValue
{

        /// <summary>
        /// 找出它们的规律;
        /// 1. 当没有正数时,只需要比较单个元素,它就是最大值
        /// 2. 当有正数时, 需要相加,但是每次加后,标记出最大值;并且若和为0或者负数时,总和清零;继续计算后面的。
        /// 时间复杂度是Q(n)。

        /// </summary>
        /// <param name="list"></param>
        /// <param name="maxTotalValue"></param>
        /// <returns>true, that means, that is max sum, otherwise, no max sum value.</returns>
        public bool FindMaxA(int[] list, out int maxTotalValue)
{
            maxTotalValue = Int32.MinValue;
            int len = list.Length;
            if (list == null || len <= 0) return false; // not can't find its maximum value.         

            //1. check if none of them in the list are positive --------------
            int i = 0;
            for (; i < len;i++ )
{
                if (list[i] > 0)
{
                    break;
}
                else
{
                    if (list[i] > maxTotalValue)
{
maxTotalValue = list[i];
}
}
}
            // there is not any positive number in the list, return it. 
            if (i == len)
{
                return true;
}

            // 2. There are positive number in the list, handle it --------------------------
            // we know the list[i] is greater than 0. 
           int currentMaxTotalValue = 0;
            for (; i < len;i++ )
{
currentMaxTotalValue = currentMaxTotalValue + list[i];
                if(currentMaxTotalValue>maxTotalValue)
{
maxTotalValue = currentMaxTotalValue;
}
                if (currentMaxTotalValue < 0)
{
currentMaxTotalValue = 0;
}
}
                return true;               
}
}
}
 


向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI