最大子陣列問題
假設有一個n長度的陣列, 求陣列中最大的非空子陣列.即子陣列各個元素相加之和最大
思路1
使用分治策略求解, 找到陣列的中間位置mid, 定義兩邊位置為left, right;
在A[left, right] 中 要求解的子陣列必然是以下三種情況之一:
1.最大連續子陣列在 A[left, mid] 的子陣列中
2.最大連續子陣列在 A[mid+1, right] 的子陣列中
3.最大連續子陣列A[i, j]; 包含了A[mid],即 left <= i <= mid <= j <= right.
思路2
設定DP陣列, DP[i]表示陣列 A[x, i]為當前從[left, i]的最大連續子陣列, left <= x <= i;
當我們把第i+1個元素加入整個陣列中時, 考慮DP[i]是否大於0, 如果是則DP[i+1]=DP[i]+A[i+1];
否則應當捨棄前面相加結果, 重新計算最大連續子陣列即DP[i+1] = A[i+1];
這時演算法時間複雜度為O(n);
相關推薦
643. Maximum Average Subarray I 最大子陣列平均數
bject ble height r12 for over xpl example padding Given an array consisting of n integers, find the contiguous subarray of given length k
最大子陣列/連續數組的最大和
HA ati pan AC () 個數 code 少包 CA 問題描述 在一個數組中找出和最大的連續幾個數(至少包含一個數)。 例如: 數組 A[] = [?2, 1, ?3, 4, ?1, 2, 1, ?5, 4],則連續的子序列[4,?1,2,1]有最大的和6。 輸入格
返回一個二維整形陣列中的最大子陣列的和(隨機二維整形陣列)
一、題目:返回一個二維整數陣列中的最大子陣列的和(隨機二維整形陣列) 二、課題要求: 輸入一個二維整形陣列,數組裡有正數也有負數; 二維陣列中連續的一個子矩陣組成一個子陣列,沒個子陣列都有一個和; 求所有子陣列的和的最大值,要求時間複雜度為O(n)。 三、結對程式設計要求: 兩人結對完成程式設計任
陣列-BAT面試經典試題:絕對眾數,零子陣列,最大子陣列和
1.絕對眾數問題 定義:給定N個數,稱出現次數最多的數為眾數:若某眾數出現的次數大於N/2,稱該眾數為絕對眾數。 如:A={1,2,1,3,2}中,1和2都是眾數,但都不是絕對眾數;A={1,2,1,3,1}中,1是絕對眾數。 已知給定的N個整數存在絕對眾數,以最低的時空負責度計算該
用c++實現環形陣列的最大子陣列之和(結對)
結對作業 1.分解問題,將環形陣列,剪開變成一個一維陣列。 2.用一維陣列的最大子陣列和解決。 對於一個環形陣列,對每一個一維陣列的表示共有n-1種 原始碼如下: 1 #include<iostream> 2 using namespace std; 3 int max_
用c++實現環形陣列的最大子陣列之和
分析: 1.將環形陣列,剪開變成一個一維陣列。 2.用一維陣列的最大子陣列和解決。 對於一個環形陣列,表示成一個一維陣列總共有n種。如圖所示: 程式程式碼: 1 #include<iostream> 2 using namespace std; 3 int mai
用c++實現環形陣列的最大子陣列的和
分析:對環形陣列確定首元素,從而變成一位陣列。因為有n個元素,所以有n種情況 如圖: 程式程式碼: #include<iostream> using namespace std; int max_sum1(int a[],int n) { int max_sum_h=a[0
環形陣列的最大子陣列求解
然後再用一維陣列求解最大子陣列的方法即可。值得注意的是,子陣列的長度不可超過n,在我程式中有所體現。最終,因為沒有要求時間複雜度的問題,我選擇 了遍歷的方法求解了此問題。 程式程式碼: 1 #include<iostream> 2 using nam
求一個環形陣列最大子陣列的和
假如我們輸入一個一維的陣列,陣列中既有正數也有負數,而且這個陣列首尾相接,就像一個圓圈。陣列中連續的一個或多個整陣列成一個子陣列,每個子陣列都有一個和。求所有子陣列的和的最大值,如何用程式設計的語言實現?設計思想:1.首先定義一個數組與這個陣列的長度,然後輸入這個陣列。2.再定義一個新的陣列,此陣列把第一個陣
能返回一個環形陣列中最大子陣列的和的小程式
要求: 1.輸入一個整形陣列,數組裡有正數也有負數。 2.陣列中連續的一個或多個整陣列成一個子陣列,每個子陣列都有一個和。 3.求所有子陣列的和的最大值。 思路: 做個專案時,我的想法是基於之前做的“能返回一個整陣列中最大子陣列的和”專案之上,它已經有能找出一個數組中最大子陣列的功能,那麼我要解決的
返回整數陣列中最大子陣列的值(陣列首尾相連)
應王老師要求,返回子陣列的作業又來啦!這次的陣列是首尾相連的 預計時間:兩小時 實際時間:週四上課15分鐘+週日13:20-14:30 先說一下我的想法,之前的作業都是可以直接遍歷整個陣列,因為陣列的長度是一定的,迴圈結束後就可以獲得到所有子陣列。但是這次作業的前提是陣列首尾相連,遍歷整個陣列是無法結束
返回一個整數陣列中最大子陣列的和(迴圈)。
要求:輸入一個整形陣列,數組裡有正數也有負數。陣列中連續的一個或多個整陣列成一個子陣列,每個子陣列都有一個和。如果陣列A[0]……A[j-1]首尾相鄰,允許A[i-1], …… A[n-1], A[0]……A[j-1]之和最大。同時返回最大子陣列的位置。求所有子陣列的和的最大值。 思路:在上次實驗的基礎上,
返回整數陣列的最大子陣列的和
#include<iostream> using namespace std; int max(int a, int b) { if
返回一個整數迴圈陣列中最大子陣列的和
要求: 輸入一個整形陣列,數組裡有整數也有負數。 陣列中連續的一個或多個整陣列成一個子陣列,每個子陣列都有一個和。 &nbs
題目:返回一個整數陣列中最大子陣列的和。
要求 1 要求程式必須能處理1000 個元素; 2 每個元素是int32 型別的; 3 輸入一個整形陣列,數組裡有正數也有負數。 4 陣列中連續的一個或多個整陣列成一個子陣列,每個子陣列都有一個和。 5 如果陣列A[0]……A[j-1]首尾相鄰
返回一個首尾相連的整數陣列中最大子陣列的和數
設計思路:只要找到從A[0]開始和最大的一段(A[0]…..A[j])(0 <= j < n) 以及以A[n-1]結尾的和最大的一段(A[i]…..A[n-1])(0 <= i < n) 該種情況的最大值為A[i]+…..+A[n-1]+A[0]+….+A[j] 如果i <
返回一維整數陣列中最大子陣列的和
1.要求:(1)輸入一個整形陣列,數組裡有正數也有負數。(2)陣列中連續的一個或多個整陣列成一個子陣列,每個子陣列都有一個和。(3)如果陣列A[0]……A[j-1]首尾相鄰,允許A[i-1], …… A[n-1], A[0]……A[j-1]之和最大。(4)同時返回最大子陣列的位置。(5)求所有子陣列的和的最大
返回一個二維整數陣列中的最大子陣列的和
#include<iostream> using namespace std; int max(int a,int b) { if(a>b) {return a; } else {return b; } } int maxsum(int
返回一個迴圈整陣列最大子陣列和
任務要求: 1、n輸入一個整形陣列,數組裡有正數也有負數。 2、n陣列中連續的一個或多個整陣列成一個子陣列,每個子陣列都有一個和。 3、n如果陣列A[0]……A[j-1]首尾相鄰,允許A[i-1], …… A[n-1], A[0]……A[j-1]之和最大。 實驗思路:
Lintcode :45. 最大子陣列差
描述 給定一個整數陣列,找出兩個不重疊的子陣列A和B,使兩個子陣列和的差的絕對值|SUM(A) - SUM(B)|最大。 返回這個最大的差值。 子陣列最少包含一個數 樣例 給出陣列[1, 2, -3, 1],返回 6 挑戰 時間複雜度為O(n),空間複雜度為O(n)