連續子陣列的最大和

2021-10-19 12:17:33 字數 1455 閱讀 1171

輸入乙個整型陣列,陣列裡有正數也有負數。陣列中的乙個或連續多個整數組成乙個子陣列。求所有子陣列的和的最大值。要求時間複雜度為 o(n).

示例

輸入

[1,-2,3,10,-4,7,2,-5]
輸出

一般解法

思路分析

1、對於陣列array,從array[1]開始逐個進行相加,與最大值比較,並不停地更替最大值

**實現如下:

public static int findmaxsum(int nums) 

int maxsum = nums[0];

int cursum = nums[0];

for(int i = 1; i < nums.length;i++)

else

if(cursum > maxsum)

maxsum = cursum;

}return maxsum;

}

思路二:

使用動態規劃的思想來分析這個問題,

1、狀態方程 :max( dp[ i ] ) = getmax( max( dp[ i -1 ] ) + arr[ i ] ,arr[ i ] )

2、上面式子的意義是:我們從頭開始遍歷陣列,遍歷到陣列元素 arr[ i ] 時,連續的最大的和 可能為 max( dp[ i -1 ] ) + arr[ i ] ,也可能為 arr[ i ] ,做比較即可得出哪個更大,取最大值。時間複雜度為 n。

**如下:

public static int findmaxsum(int nums) 

return max;

}

變形題目:

本題思路:採用動態規劃的方法進行求解,找到最優子函式f(n)=max(f(n-1)*m(n),m(n)),其中f(n)代表前n的數中最大值,m(n)代表第n個數的值,在這裡還需要考慮到負數,所以還需要找到最小值,因為最小值負數乘以負數可能成為最大值。

步驟一:設定最小值min 和最大值max初始值。

步驟二:遍歷陣列,比較當前值和當前值乘以最小值以及當前值乘以最大值;得到新的min,和max,比較max與temp的大小,然後依次遍歷陣列直到結束,最後輸出temp。

**如下:

public int maxproduct(int nums)  else 

result = math.max(n_max, result);

}return result;

}

最大和連續子陣列

問題描述 乙個數值型陣列,其子陣列有多個,求其子陣列中最大的和值。所謂和值,是指數組所有元素相加的和。解法 1 掃瞄法,維護max變數,儲存最大和,其初始值為data 0 假設最大和子陣列的第一位下標為i,i從0到n 1,對於每個i值,從data i 開始,進行累加,每加乙個數,與max變數比較一次...

連續子陣列最大和

hz偶爾會拿些專業問題來忽悠那些非計算機專業的同學。今天測試組開完會後,他又發話了 在古老的一維模式識別中,常常需要計算連續子向量的最大和,當向量全為正數的時候,問題很好解決。但是,如果向量中包含負數,是否應該包含某個負數,並期望旁邊的正數會彌補它呢?例如 連續子向量的最大和為8 從第0個開始,到第...

連續子陣列最大和

求乙個陣列的連續的子陣列的最大和。例如 連續子向量的最大和為8 從第0個開始,到第3個為止 思路 對於每個元素,有兩種可能,一是加入到原來的子陣列成為新的一員 二是自己成為新子陣列的開頭,這兩種情況應該怎樣判斷呢 如果當前元素加入到子串行中,求和的結果比自己的值還小,那麼就自己成為新子串行的開頭 即...