演算法學習1

2021-10-23 19:46:38 字數 1454 閱讀 1574

求最大子列和問題:

​ 給定n個整數的序列,求最大連續子列和,

演算法:求出每乙個子列的和 然後得到最大的和返回;

static

intmaxsum1

(int

arr)

if(maxsumreturn maxsum;

}

時間複雜度:t(n^3)

空間複雜度:o(1)

優化1:已經計算過的子列和不需要重複計算,再已經計算過的子列和上繼續加,並判斷;

static

intmaxsum2

(int

arr)}}

return maxsum;

}

時間複雜度:t(n^2)

空間複雜度:o(1)

優化2:分而治之的思想

static

intmaxsum3

(int

arr)

static

intdivideandconquer

(int

arr ,

int left,

int right)

else

} center =

(left+right)/2

;/*遞迴

*/maxleftsum =

divideandconquer

(arr,left,center)

; maxrightsum =

divideandconquer

(arr,center+

1,right);/*

得到左側最大和

*/maxleftbordersum =

0; leftbordersum =0;

for(i = center;i>left;i--)}

/* 得到右側最大和

*/maxrightbordersum =

0; rightbordersum =0;

for(i = center+

1;i<=right;i++)}

return

max(maxleftsum,maxrightsum,maxleftbordersum+maxrightbordersum);}

static

intmax

(int..

. arr)

}return max;

}

時間複雜度:t(nlogn)

空間複雜度:o(n)

static

intmaxsum4

(int

arr)

else

if(thissum<0)

}return maxsum;

}

時間複雜度:t(n)

空間複雜度:o(1)

演算法學習 1

插入排序是學習演算法時最先學到的乙個演算法,很簡單,也許看一遍就會理解,從而覺得自己掌握這個基本的演算法。但是很多人可能會像我一樣,過了一段時間,提筆來寫一下插入排序的偽 就很難寫出書本上如此優雅的偽 insertion sort a for j 2 to a.length key a j inse...

演算法學習 1

劍指offer演算法題 題目描述 給你一根長度為n的繩子,請把繩子剪成整數長的m段 m n都是整數,n 1並且m 1,m n 每段繩子的長度記為k 1 k m 請問k 1 x xk m 可能的最大乘積是多少?例如,當繩子的長度是8時,我們把它剪成長度分別為2 3 3的三段,此時得到的最大乘積是18。...

演算法學習1

因為報名參加了藍橋杯軟體技術大賽,所以,我這段時間也在練習寫演算法方面的題,但這不是主要的,更多的是為自己打下乙個好的基礎,為以後自己找工作做儲備。題目 定義乙個circle類,包含乙個double型的radius屬性代表圓的半徑,乙個findarea 返回圓的面積。定義乙個passobject,在...