第一種是最直觀的演算法,把每一種連續相鄰的和全都算出來進行比較:
#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...