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

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;               
}
}
}
 
时间: 2024-11-08 06:53:13

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

用javascript编写(找出两个数组中的差异元素并存入一个新的数组,假设每个数组内部都没有重复元素)。

onload = function(){                var a = [2,5,7,9];                var b = [3,4,5,7,8];                                //先准备一个函数,用来检查一个数组中是否包含某个数据,是就返回true,不包含就返回false                //再循环任意一个数组(这里就选a),把该数组中的每一个元素都去b数组中检查,没有就属于差异元素,就存入新的数组        

剑指Offer(Java版)第六十七题:给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。 例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口, 他们的最大值分别为{4,4,6,6,6,5}。

/*给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值.例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,5}: 针对数组{2,3,4,2,6,2,5,1}的滑动窗口有以下6个: {[2,3,4],2,6,2,5,1}, {2,[3,4,2],6,2,5,1}, {2,3,[4,2,6],2,5,1}, {2,3,4,[2,6,2],5,1}, {2,3,4,2,[6,2,5],1}, {2,3,4

用JAVA写一个函数,功能如下: 任意给定一组数, 找出任意数相加之后的结果为35(任意设定)的情况

用JAVA写一个函数.功能如下:任意给定一组数,例如{12,60,-8,99,15,35,17,18},找出任意数相加之后的结果为35(任意设定)的情况. 可以递归算法来解: package test1; import java.util.Arrays; public class demo { public static void main(String[] args) { String str = "12,60,-8,99,15,35,17,18,8,10,11,12"; int s

(算法:二分查找)在排序数组中,找出给定数字出现的次数

题目: 在排序数组中,找出给定数字出现的次数 思路: 既然出现排序数组,很容易想到二分查找,时间复杂度为O(logn): 先通过二分查找找到最左边出现该数字的下标left(如果没找到,则返回-1),然后通过二分查找找到最右边出现该数字的下表right(如果没找到,则返回-1),然后right-left+1就是出现的次数: 代码: #include <iostream> using namespace std; int BinarySearchCount(int *array,int len,i

9.11排序与查找(五)——有个排序后的字符串数组,其中散布着一些空字符串,找出给定字符串的位置

/** * 功能:有个排序后的字符串数组,其中散布着一些空字符串,找出给定字符串的位置. */ /** * 思路:对二分查找法做修改,与mid比较的地方,如果mid为空字符串,则将mid换到离它最近的非空字符串的位置. * @param strings * @param str * @return */ public static int search(String[] strings,String str){ if(strings==null||str==null||str=="")

找出两个数组的相同元素,最优算法?

在做新旧接口交替过程中,遇到了老接口和新接口json数据有些不一致的情况,需要比较两个json对象,把相同的元素赋其中一个json对象中变量的值.而且其中一个json最后输出格式还需要改变下属性名,思来想去觉得和"找出两个数组相同元素"很像,所以做下总结. "有一个数组A{0,2,3,5}和一个数组B{3,5,6,2,1,1},找出这两个数组相同元素." 一开始抽象出这道题时,脑海里浮现出最简单粗暴的方法,逐一比较. //最简单粗暴的做法,逐个比较,时间复杂度为(B

[leetcode 周赛 160] 1237 找出给定方程的正整数解

1237 Find Positive Integer Solution for a Given Equation 找出给定方程的正整数解 问题描述 给出一个函数 f(x, y) 和一个目标结果 z,请你计算方程 f(x,y) == z 所有可能的正整数 数对 x 和 y. 给定函数是严格单调的,也就是说: f(x, y) < f(x + 1, y) f(x, y) < f(x, y + 1) 函数接口定义如下: interface CustomFunction { public: // Ret

找出十进制数中出现的&#39;&#39;一&#39;&#39;的个数

一.题目要求: 给定一个十进制的正整数,写下从1开始,到N的所有整数,然后数一下其中出现“1”的个数. 要求: 1.写一个函数 f(N) ,返回1 到 N 之间出现的“1”的个数.例如 f(12)  = 5. 2.在32位整数范围内,满足条件的“f(N) =N”的最大的N是多少. 二.解决思路 通过列举几个数进行计算,可以发现函数f(N)规律如下: 1.一位十进制数:当N>=1时,f(N)=1:当N=0时,f(N)= 0; 2.两位十进制数:f(13)=个位出现1的个数+十位出现1的个数=2+4

c语言代码编程题汇总:找出字符串中与输入的字母元素相同的个数以及其所对应数组的下标值

找出字符串中与输入的字母元素相同的个数以及其所对应数组的下标值 程序代码如下: 1 /* 2 2017年3月8日08:39:16 3 功能:找出字符串中与输入的字母元素相同的个数以及其所对应数组的下标值 4 */ 5 6 #include"stdio.h" 7 int main (void) 8 { 9 int i = 0, j = 0; 10 char a[100]; 11 char ch; 12 int num = 0; 13 14 printf ("please inp