求序列中連續相鄰元素之和最大值的四種演算法

2021-06-23 01:20:12 字數 1145 閱讀 5547

第一種是最直觀的演算法,把每一種連續相鄰的和全都算出來進行比較:

#include using namespace std;

int maxsubsum1(const vector& a)

if (thissum > maxsum)

}} return maxsum;

}

第二種對最內層的迴圈改進:

#include using namespace std;

int maxsubsum2(const vector& a)

} }return maxsum;

}

第三種採用分治的思想:

#include #include using namespace std;

int maxsubrec(const vector& a, int left, int right)

else

}int mid = (left + right) / 2;

int maxleftsubsum = maxsubrec(a, left, mid);

int maxrightsubsum = maxsubrec(a, mid + 1, right);

int maxleftbordersum = 0, leftbordersum = 0;

for (int i = mid; i >= left; i--) }

int maxrightbordersum = 0, rightbordersum = 0;

for (int i = mid + 1; i <= right; i++) }

return max(maxleftbordersum + maxrightbordersum, max(maxleftsubsum, maxrightsubsum));

}int maxsubsum3(const vector& a)

第四種演算法:

int maxsubsum4(const vector& a)

else if (thissum < 0)

}return maxsum;

}

陣列不相鄰元素之和的最大值

今天下午面試老虎 被問到這題,當時腦子有點蒙,沒寫出來。這題的意思就是給你乙個陣列,讓你計算元素的和,但是這些元素都不能相鄰,求最大的和。其實這題很常見,在leetcode上面也有,但是原題是這樣的 假設你是乙個專業的竊賊,準備沿著一條街打劫房屋。每個房子都存放著特定金額的錢。你面臨的唯一約束條件是...

求連續子串行的最大值

問題描述 有一串數字 可正可負的int,放在陣列num裡 要求找到起始位置start和終止位置end,使得從start位置到end位置的所有數字之和最大,返回這個最大值max。演算法思想 使用動態規劃。設 f x 為以 a x 終止且包含 a x 的最大序列的和,有 f 1 a 1 f x 1 f ...

1000個數,求相鄰數之和的最大值(結對完成作業)

設計思想 1 輸入整型陣列 1000個元素 2.動態規劃實現最大子陣列之和 3.加入int32型別的數值溢位判斷 4.輸出最大子陣列之和和其位置。一.對於乙個元素個數較小的int陣列,沒有int32陣列溢位判斷 1 include2 using namespace std 3int main 415...