国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Leetcode題解 - 53. Maximum Subarray

2019-11-06 06:12:21
字體:
來源:轉載
供稿:網友

Find the contiguous subarray within an array (containing at least one number) which has the largest sum. For example, given the array [-2,1,-3,4,-1,2,1,-5,4], the contiguous subarray [4,-1,2,1] has the largest sum = 6.

鏈接


解法一

枚舉法,找到每個元素開始的前綴和,逐個比較找出最大的即為前綴和,結果超時,O(n^2)

int maxSubArray(vector<int>& nums) { int max_sum = nums[0]; for (int i = 0; i < nums.size(); i++) { int tmp=0; for(int j=i;j<nums.size();j++){ tmp=tmp+nums[j]; max_sum=max(max_sum,tmp); } } return max_sum; }

解法二

分治法,最大連續子序列可能存在的三個區間: 1. 完全在nums[left, mid-1] 2. 完全在nums[mid+1, right] 3. 包含 nums[mid],然后向左右擴展 最后比較左子序列、右子序列和中間序列,得到最大和。時間復雜度O(nlogn),通過

int maxSubArray(vector<int>& nums) { return divide(nums, 0, nums.size()-1);}int divide(vector<int>& nums, int left, int right) { if (left == right) return nums[left]; if (left+1 == right) return max(nums[left]+nums[right], max(nums[left], nums[right])); int mid = (left+right)/2; int left_max = divide(nums, left, mid-1); int right_max = divide(nums, mid+1, right); // 求中間連續子序列的最大和 int mid_max = nums[mid]; // 向左擴展 int temp = mid_max; for (int i = mid-1; i >= left; i--) { temp += nums[i]; mid_max = max(temp, mid_max); } // 向右擴展 temp = mid_max; for (int j = mid+1; j <= right; j++) { temp += nums[j]; mid_max = max(temp, mid_max); } return max(mid_max, max(left_max, right_max));}

解法三

動態規劃 當從頭遍歷數組元素時,對于數組中的一個整數有以下兩種情況,加入之前的subArray,或者自己另起一個新的subArray,對應情況如下:

當之前subArray 的總和大于 0 時,我們認為 其對后續結果是有貢獻的,這種情況下,我們選擇加入之前的subArray

當之前subArray 的總和小于等于0時,我們認為其對后續結果是沒有貢獻的,這種情況下,我們選擇以當前數字開始,另起一個subArray

設狀態f(j) 表示 以 nums[j] 為結尾的最大連續子序列的和,則狀態轉移方程如下: f(j) = max{f(j)+nums[j], nums[j]},其中1<=j<=n target = max{f(j)}, 其中1<=j<=n (此處狀態轉移方程不是很明白,作為


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 新绛县| 孟州市| 全州县| 仲巴县| 开远市| 东兴市| 多伦县| 微山县| 永川市| 镇雄县| 汉中市| 容城县| 普定县| 江安县| 东安县| 瑞金市| 乡城县| 渑池县| 武义县| 镇赉县| 洱源县| 稻城县| 秦皇岛市| 静宁县| 茶陵县| 郧西县| 清镇市| 开江县| 宁南县| 辽中县| 漳浦县| 界首市| 利津县| 东至县| 贵德县| 柘城县| 凌云县| 乐都县| 额济纳旗| 阿克苏市| 石首市|