环形数组最大子数组之和
生活随笔
收集整理的這篇文章主要介紹了
环形数组最大子数组之和
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目:返回一個整數數組中最大子數組的和。
要求:
- 輸入一個整形數組,數組里有正數也有負數。
- 數組中連續的一個或多個整數組成一個子數組,每個子數組都有一個和。
- 如果數組A[0]……A[j-1]首尾相鄰,允許A[i-1],…… A[n-1],A[0]……A[j-1]之和最大。
- 同時返回最大子數組的位置。
- 求所有子數組的和的最大值。
合作伙伴:孟西鑫 博客地址:http://home.cnblogs.com/u/wanzitou/feed/blog/
結對編程要求:
- 兩人結對完成編程任務。
- 一人主要負責程序分析,代碼編程。
- 一人負責代碼復審和代碼測試計劃。
- 發表一篇博客文章講述設計思想,出現的問題,可能的解決方案(多選)、源代碼、結果截圖、總結
設計思路:為了實現程序要求,這次我在程序代碼外圍加了一個循環,主要目的是變換數組,每一次循環讓原數組向前進一個數,然后得到新的數組,然后在新的數組上進行動態規劃,把每一次動態規劃的最大值放到一個數組里再對這個數組求最大值,如此求得整個環形數組的最大值。
#include<iostream> using namespace std;int main() {int A[100], B[100], C[100];int max(int A, int B);int length = 0;//用來記錄數組長int sumOfArray;//sumOfArray用于存放包含目前的子數組的和的最大值int sum = 0;//sum用來存放不包含當前數的所有子數組的和的最大值cout << "請輸入數組:";for (length = 0;;){cin >> A[length];length++;if (getchar() == '\n'){break;}}//這里做數組轉換,每一次循環數組里的數就向前進一位,然后付給另一個數組for (int i = 0; i < length; i++){for (int j = 0; j < length; j++){if ((i + j) > (length-1)){B[j] = A[i + j - length];}else{B[j] = A[j + i];}}sumOfArray = B[0];for (int k = 1; k < length; k++){sum = max(sum, sumOfArray);sumOfArray = max((sumOfArray + B[k]), B[k]);}sumOfArray = max(sum, sumOfArray);C[i] = sumOfArray;}int maxNum = C[0];for (int i = 0; i < length; i++){if (C[i] > maxNum){maxNum = C[i];}}cout << "這個循環整數數組的子數組之和的最大值為:" << maxNum << endl;return 0; } int max(int A, int B) {if (A > B){return A;}else{return B;} }轉載于:https://www.cnblogs.com/gaara-zhang/p/5326463.html
總結
以上是生活随笔為你收集整理的环形数组最大子数组之和的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: jst获取不到springmvc中mod
- 下一篇: 纠结的velocity log那些事(出