九度 1527 首尾相連陣列的最大子陣列和

2021-09-06 14:08:48 字數 1169 閱讀 7392

題目描述:

給定乙個由n個整數元素組成的陣列arr,陣列中有正數也有負數,這個陣列不是一般的陣列,其首尾是相連的。陣列中乙個或多個連續元素可以組成乙個子陣列,其中存在這樣的子陣列arr[i],…arr[n-1],arr[0],…,arr[j],現在請你這個acm_lover用乙個最高效的方法幫忙找出所有連續子陣列和的最大值(如果陣列中的元素全部為負數,則最大和為0,即乙個也沒有選)

思路

1. 本以為這題與 leetcode 上 gas station 一樣, 提交之後也能通過 2 個 case, 但最終通過一組資料 (2 1 -3 2) 決定了 gas station 的做法不正確

2. 分兩種情況討論, (1) 假設最大連續子陣列不相連那麼用dp解法即可. (2) 假設最大連續子陣列相連, 那麼肯定有乙個負數, 這個最大連續子陣列不包含它, 這個負數就是陣列中最小連續子陣列的末尾(它不一定是最小的, 比如 -2 -1). 那麼我們從這個末尾的下一位開始使用方法(1)計算首位相連的情況. 返回(1)(2)的較大值

**

#include #include 

using

namespace

std;

int val[250000

];int maxseq(int a, int

b)

return

global;}

int minindex(int

n) }

return

index;

}int

main()

if(!hasneg)

//has negtive numbers

int num1 = maxseq(0

, n);

int index =minindex(n);

for(int i = n; i < 2*n; i ++)

val[i] = val[i-n];

int num2 = maxseq(index+1, index+1+n);

//printf("%d %d %d\n",num1, index, num2);

cout << max(num1, num2) <}

return0;

}

NYOJ 983 首尾相連陣列的最大子陣列和

時間限制 1000 ms 記憶體限制 65535 kb 難度 4 描述給定乙個由n個整數元素組成的陣列arr,陣列中有正數也有負數,這個陣列不是一般的陣列,其首尾是相連的。陣列中乙個或多個連續元素可以組成乙個子陣列,其中存在這樣的子陣列arr i arr n 1 arr 0 arr j 現在請你這個...

NYOJ 983 首尾相連陣列的最大子陣列和

時間限制 1000 ms 記憶體限制 65535 kb 難度 4 描述 給定乙個由n個整數元素組成的陣列arr,陣列中有正數也有負數,這個陣列不是一般的陣列,其首尾是相連的。陣列中乙個或多個連續元素可以組成乙個子陣列,其中存在這樣的子陣列arr i arr n 1 arr 0 arr j 現在請你這...

nyoj983 首尾相連陣列的最大子陣列和

時間限制 1000 ms 記憶體限制 65535 kb 難度 4 描述給定乙個由n個整數元素組成的陣列arr,陣列中有正數也有負數,這個陣列不是一般的陣列,其首尾是相連的。陣列中乙個或多個連 續元素可以組成乙個子陣列,其中存在這樣的子陣列arr i arr n 1 arr 0 arr j 現在請你這...