01-复杂度1 最大子列和问题(20 分)
来源:互联网 发布:mac删除系统文件 编辑:程序博客网 时间:2024/06/05 21:59
import java.util.Scanner;import static java.lang.Math.*;public class Main {/** * O(n) algorithm. */public static int longestSubsequence1(int[] p, int n) {int thisSum = 0;int maxSum = 0;for (int i = 0; i < n; i++) {thisSum += p[i];if (thisSum > maxSum) {maxSum = thisSum;}if (thisSum < 0)thisSum = 0;}return maxSum;}/** * O(n*log(n)) algorithm */public static int longestSubsequence2(int[] p, int l, int r) {if(l == r)return p[l];if(l < r) {int mid = (l + r) / 2;int leftSum = longestSubsequence2(p, l, mid-1);int rightSum = longestSubsequence2(p, mid + 1, r);int maxLeft, maxRight;int thisLeft, thisRight;thisLeft = thisRight = maxLeft = maxRight = 0;for (int i = mid-1; i >= l; i--) {thisLeft += p[i];maxLeft = max(maxLeft, thisLeft);}for (int i = mid; i <= r; i++) {thisRight += p[i];maxRight = max(maxRight, thisRight);}int maxSum = maxLeft+maxRight;maxSum = max(maxSum, max(leftSum, rightSum));return maxSum ;}return 0;}public static void main(String[] args) {int k;int[] p;@SuppressWarnings("resource")Scanner scanner = new Scanner(System.in);k = scanner.nextInt();p = new int[k];for (int i = 0; i < k; i++) {p[i] = scanner.nextInt();}//System.out.println(longestSubsequence1(p, k));System.out.println(longestSubsequence2(p, 0, k-1));}}
阅读全文
0 0
- 01-复杂度1 最大子列和问题 (20分)
- 01-复杂度1 最大子列和问题 (20分)
- 01-复杂度1 最大子列和问题 (20分)
- 01-复杂度1 最大子列和问题 (20分)
- 01-复杂度1 最大子列和问题 (20分)
- 01-复杂度1 最大子列和问题 (20分)
- 01-复杂度1 最大子列和问题 (20分)
- 01-复杂度1 最大子列和问题 (20分)
- 01-复杂度1 最大子列和问题 (20分)
- 01-复杂度1 最大子列和问题 (20分)
- 01-复杂度1 最大子列和问题 (20分)
- 01-复杂度1 最大子列和问题 (20分)
- 01-复杂度1 最大子列和问题 (20分)
- 01-复杂度1 最大子列和问题(20 分)
- 01-复杂度1 最大子列和问题(20 分)
- 01-复杂度1 最大子列和问题(20 分)
- 01-复杂度1 最大子列和问题 (20分)分治
- MOOC数据结构-01-复杂度1 最大子列和问题 (20分)
- Spring事务管理的使用
- HDOJ2044
- 贪心B 活动选择问题(很经典)
- 第五课、 C基本语法
- php 获取当前的域名
- 01-复杂度1 最大子列和问题(20 分)
- this call apply
- 数据结构 链表的基本操作(C语言)
- c++笔记——运算符重载
- HDOJ2046
- 贪心C 活动选择
- Mongodb 常用命令--学习2
- CCF推荐会议和期刊----网络空间安全
- leetcode第三题Longest Substring Without Repeating Characters