1. 程式人生 > >有一個數組,由正整數、負整數、零組成,求和最大的連續子陣列

有一個數組,由正整數、負整數、零組成,求和最大的連續子陣列

$arr = [-11,1,111,-120,1,1,1,-55,-1,21,-1,1,1,1,1,-55,-1,130,1,1,-1];
// 歷史最大
$log_arr = [
	'start_item' => 0,
	'value' => 0,
	'end_item' => 0
];
// 當前最大
$now_arr = [
	'start_item' => 0,
	'value' => 0,
	'end_item' => 0,
	'now_value' => 0
];
for($i = 0;$i<count($arr);$i++){
	echo $arr[$i]+$now_arr['now_value'].'<br/>';
	// 如果當前項加上累計值等於0就說明這個值是當前最大值
	if( $arr[$i]+$now_arr['now_value'] < 1 ){
		// 對比當前最大值和歷史最大值
		if($log_arr['value'] < $now_arr['value']){
			$log_arr = $now_arr;
		}
		$now_arr = [
			'start_item' => 0,
			'value' => 0,
			'end_item' => 0,
			'now_value' => 0
		];
	}
	// 如果當前項加上累計值大於0就說明還有繼續擴大的可能
	if( $arr[$i]+$now_arr['now_value'] > 0 ){
		// 如果當前第一次累加 設定起始項
		if($now_arr['now_value'] == 0){
			$now_arr['start_item'] = $i;
		}
		// 更新累計值
		$now_arr['now_value'] = $now_arr['now_value']+$arr[$i];
		// 如果累計值大於基本值 更新基本值
		if($now_arr['now_value']>$now_arr['value']){
			$now_arr['value'] = $now_arr['now_value'];
			$now_arr['end_item'] = $i;
		}
	}
	// 如果當前項加上累計值小於0就說明這不是起始位置 什麼都不用做
}
if($log_arr['value'] < $now_arr['value']){
	$log_arr = $now_arr;
}
echo '最大值為:'.$log_arr['value'].'<br/>';
echo '開始項為:'.$log_arr['start_item'].'<br/>';
echo '終止項為:'.$log_arr['end_item'].'<br/>';
exit;

相關推薦

面試題求一個整數陣列中和連續陣列例如:[1, 2, -4, 4, 10, -3, 4, -5, 1]的連續陣列是[4, 10, -3, 4](需寫明思路並程式設計實現)

php實現: function get_max_value($arr) { $max_sum=0;//最大的值 $max_start=0;//和最大子陣列開始下標 $max_end=

二維 連續陣列

    演算法導論中的一個題目,上次面試題中被擴充套件到了二維和二維環形陣列,記錄下以供參考。一、    一維連續子陣列 最大和    問題描述:給定一個一維陣列,求其中連續子陣列和的最大值。    樣

演算法學習-陣列連續陣列

題目 對於長度為N的陣列A,求連續子陣列的和最接近0的值。 如: 陣列A:1,-2,3,10,-4,7,2,-5 它是所有子陣列中,和最接近0的是哪個? 演算法流程 申請比A長1的空間sum[-1,0,...,N-1],sum[i]是A的前i項和。定義sum[-

個數整數整數組成求和連續陣列

$arr = [-11,1,111,-120,1,1,1,-55,-1,21,-1,1,1,1,1,-55,-1,130,1,1,-1]; // 歷史最大 $log_arr = [ 'start_item' => 0, 'value' => 0, 'end

說你個數其中第i個元素是第i天給定股票的價格。設計一個演算法來找到的利潤多可以完成兩個交易。

用四個變數來表示倆次交易的買入賣出,遍歷陣列,比較每次交易的利益,儲存最大的。 int maxProfit(vector<int> &prices) { int len=prices.size(); if(len

求一個整數中和連續例如:[1, 2, -4, 4, 10, -3, 4, -5, 1]的連續是[4, 10, -3, 4](需寫明思路並編程實現)

class col code pan IT [] 例如 exit arr $arr = [ 1 , 2 , -4 , 4 , 10 , -23 , 4 , -5 , 1]; $max_sum = 0; $sum=0; $new = []; $i =

matlab統計個數中各元素出現的頻數頻率

>> x =['If x is a numeric array, TABLE is a numeric matrix.']'; >> tabulate(x) Value Count Percent I 1 2.44% f

【小紅書2017年筆試】求個數中平均數陣列

 題目:   * 給一個數組,裡邊有N個整數,找長度為K(0<K<N)且平均值最大的子陣列,並把這個最大值輸出來 輸入描述:* 6 (N的值)* 1 12 -5 -6 50 3 (含有N個整數的陣列)* 4 (K的值) 輸出描述: * 12.75 題目很簡單,時

連續絕對值

面試連續子數組最大和,可考慮public class Solution { public int maxSubArray(int[] nums) { int len=nums.length; if(nums==null || len==0)return 0;

連續線性時間解法

end ios names cnblogs 最大連續子數組 turn bsp return pre 思想: 經過分析可得,若子數組和為負數就已經代表這個子數組不可能為最大子數組了,相反若子數組和為正,則將最大的和比較出來便可。 故可直接遍歷該數組一旦子數組和已為負數,則置為

大子矩陣連續進階動態規劃初級poj1050

ostream 子數組 images 使用 運行時間 規劃 out 思考 turn 題目描述:現給出一個N*N矩陣,要求求出擁有最大和的子矩陣的和。 例如: 這樣的一個矩陣,最大子矩陣的和為15; 此題可以讓人聯想到求最大連續子數組,求最大子數組在上一篇文章中http:/

[算法]連續長重復

name public 個數 enc har 最長 連續 null static 這兩道題是我在面試中親身經歷的,在面試滴滴的過程中,我遇到過最大子數組和,在面試阿裏的過程中,我遇到過最長重復子串。 1. 最大子數組和 比如,給定一個數組, 1, -2, 3, -4,

編程之法:面試和算法心得(連續和)

參考 否則 ++ 例子 返回 log 遍歷 方法 時間 內容全部來自編程之法:面試和算法心得一書,實現是自己寫的使用的是java 題目描述 輸入一個整形數組,數組裏有正數也有負數。數組中連續的一個或多個整數組成一個子數組,每個子數組都有一個和。 求所有子數組的和的最大值,要

軟件工程第三次個人作業 - 連續

class http pos 窮舉法 markdown 數組 lin ima odin 最大連續子數組和(最大子段和) 問題: 給定n個整數(可能為負數)組成的序列a[1],a[2],a[3],…,a[n],求該序列如a[i]+a[i+1]+…+a[j]的子段和的最大值。

返回一個二維整數陣列中的陣列

一。題目:                   1、輸入一個二維整形陣列,數組裡有正數有負數。                 &nbs

連續序列的和時間複雜度為 O(n)

練習題目 給定陣列 [ a0, a1, a2, …, an ] ,找出其最大連續子序列和,要求時間複雜度為 O(n),陣列包含負數。 例如:輸入 [ -2,11,-4,13,-5,-2] ,輸出 20(即 11 到 13)。 解答 關於這個問題有很多種解法,這裡介紹一種時間複雜度僅為 O(n)

整數陣列中和陣列

輸入一個整型陣列,數組裡有正數也有負數。陣列中連續的一個或多個整陣列成一個子陣列,每個子陣列都有一個和。求所有子陣列的和的最大值。要求時間複雜度為O(n)。 如:輸入的陣列為1, -2, 3, 10, -4, 7, 2, -5,和最大的子陣列為3, 10, -4, 7, 2

HDU 3415 Max Sum of Max-K-sub-sequence(長度不超過k的連續序列和單調佇列)

題目連結: HDU 3415 Max Sum of Max-K-sub-sequence 題意: 給n個數,首尾相連,求長度不超過k的最大連續子序列和。 資料範圍:1≤n≤100000,1≤k≤n 分析: 因為考慮首尾相連,所以我們把n個數看成2∗

連續序列和以及開始結束下標(Java)

對一個有n個元素的陣列,求最大的連續子陣列的和,並求其開始、結束下標。 陣列的元素必然有正數也有負數才有意義,如果全是正數,那最大的子陣列就是本身;如果全部為負數,那最大子陣列就是空陣列。 例如下面的陣列,其最大子陣列序列和為187,子陣列為X[2,..,6

長上升序列連續序列和長公共串”的Java實現

一、問題描述 這是三道典型的dp問題。 最長上升子序列:在一列數中尋找一些數,這些數滿足:任意兩個數a[i]和a[j],若i<j,必有a[i]<a[j],這樣最長的子序列稱為最長遞增(上升)子序列。 設dp[i]表示以i為結尾的最長遞增子序列的長度,則狀態轉移