网站制作品牌有哪些汉沽网站建设
web/
2025/9/28 13:05:02/
文章来源:
网站制作品牌有哪些,汉沽网站建设,网站关键词排名检测工具,长沙网络营销招聘求解最大子序列和 tag#xff1a; 数据结构与算法 最大子序列和问题#xff1a; 给定序列A1, A2#xff0c;... AN#xff0c; 求最大的子序列和。 例如 #xff1a; 对于序列4, -3, 5, -2, -1, 2, 6, -2#xff0c; 最大序列和为11#xff08;4 -3 5 - 2 - 1 2 …求解最大子序列和 tag 数据结构与算法 最大子序列和问题 给定序列A1, A2... AN 求最大的子序列和。 例如 对于序列4, -3, 5, -2, -1, 2, 6, -2 最大序列和为114 -3 5 - 2 - 1 2 6 算法一 利用两个循环第一个循环把序列遍历一遍第二个循环则从Ai累加到AN每加一次判断一下是否大于之前的最大子序列和 int maxSubsequenceSum1 (const int arr[], int n) {int maxSum 0;int temp;for (int i 0; i n; i) {temp 0;for (int j i; j n; j) {temp arr[j];if (temp maxSum)maxSum temp;}}return maxSum;
} 时间复杂度On2 算法二 首先把序列从中间一分为二 则最大子序列和的存在有三种情况 全在左边的子序列全在右边的子序列处在中间 对于第一和第二种情况只需要递归调用求解函数对于第三种情况则要分别求出从中间出发向左边和向右边各自的最大子序列和。int max(int a, int b, int c) {int max;if (a b)max a;else max b;if (c max)max c;return max;
}int maxSubsequenceSum2 (const int arr[], int begin, int end) {int maxLeftSum, maxRightSum, maxLeftCenterSum, maxRightCenterSum, center, temp;if (begin end) {if (arr[begin] 0)return arr[begin];elsereturn 0;}center (beginend)/2;maxLeftSum maxSubsequenceSum2(arr, begin, center);maxRightSum maxSubsequenceSum2(arr, center1, end);maxLeftCenterSum 0;temp 0;for (int i center; i begin; i--) {temp arr[i];if (temp maxLeftCenterSum)maxLeftCenterSum temp;}maxRightCenterSum 0;temp 0;for (int i center1; i end; i) {temp arr[i];if (temp maxRightCenterSum)maxRightCenterSum temp;}return max(maxLeftSum, maxRightSum, (maxLeftCenterSummaxRightCenterSum));
} 时间复杂度:O(nlogn) 算法三: 累加序列,若发现当前序列和大于之前最大序列和,则替换.若发现当前序列和小于0,则将当前序列和置换成0,相当于把前面的序列都舍弃掉. int maxSubsequenceSum3(int arr[], int n) {int tempSum 0, maxSum 0;for (int i 0; i n; i) {tempSum arr[i];if (tempSum 0)tempSum 0;if (tempSum maxSum)maxSum tempSum;}return maxSum;
} 时间复杂度:O(n) 转载于:https://www.cnblogs.com/bgmind/p/3959193.html
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/83345.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!