C 求數值陣列的絕對增大子陣列的最大長度

2021-10-05 18:35:23 字數 1066 閱讀 3081

這道題是網路中心某題。雖然簡單但是有點點小心機,就是處理指標溢位的部分。

演算法思想如下:

1 長度為n的陣列要找到絕對增大的子陣列要經過n-1次比較。

2 設定三個指標,乙個記錄子陣列起始位址,乙個記錄終止位址,乙個為比較數值的指標(總是在終止指標的下乙個位置或者重合)

3 不斷比較指標所指位址的值,若a[i]>=a[+1],則分是否為最後一次比較移動終止位址指標或者比較指標。不是最後一次,就三個都動;是最後一次,就三個都不動。

若a[i]分是否最後一次比較來移動指標,可以防止指標位置溢位

寫演算法加**加不斷除錯竟然花了我快半小時qaq,所以本**可輸入正整數、負整數。檢測50組數內(自己可以改)陣列的絕對增大子陣列的長度。

#include

#include

using

namespace std;

//找最大絕對連續增大的子陣列的長度

int len=0;

//陣列長度初始為0,全域性變數

int sublen=0;

//子陣列長度

intfindlen

(int a,

int* p)

else

//不是最後一次則移動所有指標

}else

//有自增

else}}

sublen=j-p;

//計算子陣列長度

if(sublen!=

0) sublen+=1

;return0;

}int

main()

if(c==

'\n'

)break

;//換行則結束則結束輸入

}findlen

(str1,p)

; cout<<

"the length is:"

}

演算法可能還有誤差,但是大致思想應該沒錯。僅供參考。寫到這裡我發現確實有點問題,少考慮了情況,後面可能需要把所有增大子陣列長度記錄並選出最大。。。忘記考慮了。。。下次有時間寫

求陣列的最大子陣列和最大子陣列的和

輸入乙個整形陣列,陣列裡有正數也有負數。陣列中連續的乙個或多個整數組成乙個子陣列,每個子陣列都有乙個和。求所有子陣列的和的最大值。要求時間複雜度為o n 例如輸入的陣列為1,2,3,10,4,7,2,5,和最大的子陣列為3,10,4,7,2,因此輸出為該子陣列的和18。include using n...

求陣列中最大子陣列的和

本篇部落格介紹第二週課上小測 求陣列中最大子陣列的和,使用c 實現。1 include2 using namespace std 3int main 419 int ans 100000 20 再次遍歷,最大值即為最大子陣列的和 21for i 1 i n i 22 ans max ans,a i ...

求陣列的乙個最大子陣列

實現內容 假如有這樣乙個陣列,a 要求得到乙個總值最大的子陣列。例如a的乙個最大子陣列為a 7.10 求解思想 1 暴力求解 迴圈每乙個元素,並從每乙個元素的下標開始累加,每次選取較大的和。例如從第乙個元素開始,第一次累加是13,那麼記錄最大的maxsubarray為13 第二次累加為13 2 11...