1. 程式人生 > >線性時間內求最大子陣列和

線性時間內求最大子陣列和

    給定KK個整陣列成的序列{ N_1N1N_2N2, ..., N_KNK },“連續子列”被定義為{ N_iNiN_{i+1}Ni+1, ..., N_jNj },其中 1 \le i \le j \le K1ijK

“最大子列和”則被定義為所有連續子列元素的和中最大者。例如給定序列{ -2, 11, -4, 13, -5, -2 },其連續子列{ 11, -4, 13 }有

大的和20。現要求你編寫程式,計算給定整數序列的最大子列和

  可以線上性時間內求解!採用線上處理的方式,即每輸入一個數立即進行處理。該演算法的核心基於下面的事實:如果整數序列{a1, a2, ... , an}的最大和子列是{ai,ai+1,...,aj},那麼必有當前序列和ThisSum>=0(ThisSum = ai+ai+1+...al;   i <= l <= j};所以,一旦發現當前子列和為負,則可以重新開始考察一個新的子序列。

  詳細解法如下:

#include<stdio.h>
#include<stdlib.h>


int main()
{
int i, n, k, ThisSum = 0, MaxSum = 0;
scanf("%d", &n);
for(i=0; i<n; i++)
{
scanf("%d", &k);
ThisSum += k;
if(ThisSum > MaxSum)
{
MaxSum = ThisSum;
}
else if(ThisSum < 0)
  ThisSum = 0;
}

printf("%d", MaxSum);

return 0;

}



相關推薦

線性時間大子陣列

    給定KK個整陣列成的序列{ N_1N​1​​, N_2N​2​​, ..., N_KN​K​​ },“連續子列”被定義為{ N_iN​i​​, N_{i+1}N​i+1​​, ..., N_jN​j​​ },其中 1 \le i \le j \le K1≤i≤

允許交換兩個數(一對)的位置 大子陣列

#include <iostream> #include <vector> using namespace std; int findMaxSubquenceSum(vect

一個已知二維陣列大子陣列(司宇,廖強)

小組成員:司宇,廖強 設計流程:            設計介面:               程式設計:1.封裝一個求二維整陣列最大子陣列和的子程式;  

如何大子陣列

問題描述:一個有n個元素的陣列,這n個元素可以是正數也可以是負數,陣列中連續的一個或多個元素可以組建成一個連續的子陣列,一個數組可以有多個這樣的連續子陣列,求子陣列和的最大值,並找出最大的子陣列,例如,對於陣列{1,-2,4,8,-4,7,-1,-5},其最大和的子陣列是{4,8,-4,7}

分治策略,大子陣列golang實現

package main import ( "fmt" ) func main() { a := []int{9, 6, -7, 1, 8, -20, 5, 3, 4, 0, 2} l, r, s := FindMaxSubArray(a, 0, 10)

leetcode 53 Maximum Subarray (大子陣列

題目要求 (高頻題) 給定一個整數陣列nums,找到具有最大和的連續子陣列(包含至少一個數字)並返回其和。 示例 Input: [-2,1,-3,4,-1,2,1,-5,4], Output: 6 Explanation: [4,-1,2,1] has the large

一個已知陣列大子陣列

思路: 用textbox控制元件輸入陣列,再求出最大子陣列和 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing

大子陣列,以及大子陣列的起始位置末尾位置

int MaxSubArraySum(int a[], int N, int &start, int &end) { int ThisSum, MaxSum, i, j; *start = 0; *end = 0; MaxSum = 0; for (i = 0; i < N;

HDU acm 1003 Max Sum || 動態規劃大子序列詳解

line namespace num more sequence mem ould 動態規劃 ger Max Sum Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Ot

數據結構(一)-----4種方法大子

include iss 需要 中間 () log 完整 font sso 數據結構(一)-----4種方法求最大子列和 1、暴力算法 /* 作者:mys 功能:求最大子列和 日期:2018/7/23 */ #include<stdio.h> #include&l

[C++]用三種方法大子

規劃 amp pan 分治 一位 max 組成 所有 ret 問題描述:給定n個整數組成的序列,求其中子段和的最大值。當所有整數均為非負整數時定義其最大子段和為0 方法一:O(n2)用一個值存儲最大和,用枚舉所有和的方法,來與這個值比較並更新最大值。 1 int

陣列-BAT面試經典試題:絕對眾數,零子陣列大子陣列

1.絕對眾數問題 定義:給定N個數,稱出現次數最多的數為眾數:若某眾數出現的次數大於N/2,稱該眾數為絕對眾數。 如:A={1,2,1,3,2}中,1和2都是眾數,但都不是絕對眾數;A={1,2,1,3,1}中,1是絕對眾數。 已知給定的N個整數存在絕對眾數,以最低的時空負責度計算該

返回一個迴圈整陣列大子陣列

任務要求: 1、n輸入一個整形陣列,數組裡有正數也有負數。 2、n陣列中連續的一個或多個整陣列成一個子陣列,每個子陣列都有一個和。 3、n如果陣列A[0]……A[j-1]首尾相鄰,允許A[i-1], …… A[n-1], A[0]……A[j-1]之和最大。   實驗思路:

返回一個迴圈陣列大子陣列以及大子陣列

  設計介面: 程式設計:1.封裝一個求迴圈整陣列最大子陣列和的子程式;                   2.設計一個主函式,主函式可以呼叫子函式;        

11.02-解決連續陣列大子陣列

要求:        輸入一個整形陣列,數組裡有整數也有負數。        陣列中連續的一個或多個整陣列成一個子陣列,每個子陣列都有一個和。       &nbs

大子

int MaxSubSeqSum(int arr[], int n) { int currentSum, maxSum; currentSum = maxSum = 0; for(int i=0; i<n; i++) { curr

課堂練習3 返回一個二維整數陣列大子陣列

小組成員:陳澤 郭少周 設計流程:                             設計要求.:1. 輸入一個二維整形陣列,數組裡有正數也有負

二維陣列大子陣列的求解

 一.設計思想       首先要用一段程式碼,可以讀入txt檔案裡的二維陣列。需要將txt檔案放入同一目錄。        其次要用一段程式碼得到最大子陣列的和

二維整形陣列大子陣列(結對作業)

題目:返回一個二維整數陣列中最大子陣列之和。 要求: 1.輸入一個二維整形陣列,數組裡有正有負。 2.二維陣列中連續的一個子矩陣 組成一個數組,每個子陣列都有一個和。 3.求所有子陣列的和的最大值。 結對程式設計要求 兩人結對完成程式設計任務。 一人負責程式分析,程式碼程式設計。 一

[LeetCode] 628. Maximum Product of Three Numbers 三個數字的大乘積 [LeetCode] 152. Maximum Product Subarray 大子陣列乘積 All LeetCode Questions List 題目彙總

Given an integer array, find three numbers whose product is maximum and output the maximum product. Example 1: Input: [1,2,3] Output: 6  Example 2