有一個數組,由正整數、負整數、零組成,求和最大的連續子陣列
$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為結尾的最長遞增子序列的長度,則狀態轉移