找出给定数数组里连续的元素和的最大值
2015-12-03 10:24
453 查看
给定数组可能是全负,全正,全0,或者正负都有。
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; } } }
相关文章推荐
- 统计easyui datagrid某列之和显示在对应列下面
- 约束3(constrains)
- [iOS进阶]Baidu Map SDK之批量请求
- poj--1237--Drainage Ditches(最大流)
- 完全卸载oracle11g步骤
- 什么是XML RPC?
- 11月末全球域名商解析量22强:新网榜尾 跌破百万
- AngularJS进阶(十五)Cookie 'data' possibly not set or overflowed because it was too large
- 代理模式Proxy
- AngularJS进阶(十五)Cookie 'data' possibly not set or overflowed because it was too large
- POJ1804 Brainman
- mysql分区功能详细介绍,以及实例
- 内存分配
- 用纯css改变下拉列表select框的默认样式
- Dynamic class loading
- javaweb开发过程中的错误总结
- android:clearTaskOnLaunch=true 和android:finishTaskOnLaunch=true的区别
- Docker vs Vagrant
- 初学php之echo print print_r var_dump的区别
- linux oracle 创建表空间,用户,赋权限