自己寫了半個小時沒有耐心寫下去了就查了查這個演算法到底是怎麼寫的,剛開始看偽**能看的懂,但是就是寫不出來**這是我原來寫的**剛開始寫的第乙個函式但是寫到遞迴就開始亂了。
//#include//#include//using namespace std;
//typedef std::vectornpt;
//void find_max_crossing_subarray(const npt &a,int low,int high,int &max_left,int &max_right)
// }
// int sum = a[mid];
// int right_sum = a[mid];
// max_right = mid;
// for (int i = mid; i < high; i++)
// // }
// //}
////void find_maximum_sumarray(npt &a, int &cross_low, int &cross_high)
// else
// //}
這是人家寫的**#includeusing namespace std;
//尋找跨越中點的最大子陣列;
void find_crossing_subarray(int*a, int low, int mid, int high, int& start, int& end, int& max_sum)
} int right_sum = int32_min;
sum = 0;
for (int i = mid + 1; i <= high; i++)
} max_sum = left_sum + right_sum;
}void find_maximum_subarray(int*a, int low, int high, int&start, int&end, int&max_sum)
else
else if ((cross_sum >= left_sum) && (cross_sum >= right_sum))
else }}
int main()
int max = 0, start = 0, end = 0;
find_maximum_subarray(a, 0, n - 1, start, end, max);
cout << max << endl;
}
希望後來會慢慢的好起來
**
演算法導論 分治法 最大子陣列
題目描述 給定義陣列a,長度為n,找出陣列a中的最大子陣列,例如陣列a 則最大子陣列為。使用分治策略的求解方法 假定我們要尋找子陣列a low.high 的最大子陣列,使用分治法意味著我們要將子陣列劃分為兩個規模盡可能相等的子陣列。也就是說,找到子陣列的 位置,比如mid,然後求解兩個子陣列a lo...
演算法 最大數
給定一組非負整數,重新排列它們的順序使之組成乙個最大的整數。示例 1 輸入 10,2 輸出 210 示例 2 輸入 3,30,34,5,9 輸出 9534330 說明 輸出結果可能非常大,所以你需要返回乙個字串而不是整數。1 將輸入的整數陣列變成字串陣列 2 完成字串數字之間的比較,a b b a ...
演算法導論 分治法
分治法的思想 分 將問題分解為規模更小的子問題 治 將這些規模更小的子問題逐個擊破 合 將已解決的子問題合併,最終得出 母 問題的解 例如 將乙個陣列a,從小到到大排序。分治思想 我們可以將陣列a分成2個陣列,即a 0.a.length 2 a a.length 2 1,a.length 分別將它們...