网易云数据结构- Maximum Subsequence Sum
题目
思路
显然是最大子列和的进化版,那就先思考下经典的最大子列和。这也是道思维题,啥算法也没用到,全是思维技巧,真心不知道考试遇到这种题该怎么办了。
存放答案的一个类,我把它看成一个袋子,需要什么都可以“.”出来
class ans
{
static int maxsub = 0;
static int firstElement = 0;
static int lastElement = 0;
static int lastElementIndex = 0;
}
经典的最大子列和只是更新了maxsub,现在可以同时更新firstElement和lastElement,最后输出即可。
这时更新一下
if (tempsum > ans.maxsub)
{
ans.lastElement = arr[i];
ans.firstElement = firstElement;
ans.maxsub = tempsum;
}
以及
这时更新一下
if (tempsum < 0)
{
if (i + 1 < arr.length)
firstElement = arr[i + 1];
tempsum = 0;
}
对于为什么可以这样,我相信仔细思考一定能看懂。一定要先思考,再看答案,这样才能有共鸣。
代码
package 网易云数据结构;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.StreamTokenizer;
import java.security.acl.LastOwnerException;
import java.util.Scanner;
public class Main
{
public static void main(String[] args) throws IOException
{
StreamTokenizer in = new StreamTokenizer(new BufferedReader(
new InputStreamReader(System.in)));
PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
in.nextToken();
boolean isAllNegative = true;
// 读入k个数据
int k = (int) in.nval;
int arr[] = new int[k + 1];
for (int i = 1; i <= k; i++)
{
in.nextToken();
arr[i] = (int) in.nval;
if (arr[i] >= 0)
{
isAllNegative = false;
}
}
// 处理数据
int tempsum = 0;
int firstElement = arr[1];
for (int i = 1; i < arr.length; i++)
{
tempsum += arr[i];
if (tempsum > ans.maxsub)
{
ans.lastElement = arr[i];
ans.firstElement = firstElement;
ans.maxsub = tempsum;
}
if (tempsum < 0)
{
if (i + 1 < arr.length)
firstElement = arr[i + 1];
tempsum = 0;
}
}
// 输出
if (isAllNegative)
{
System.out.println(0 + " " + arr[1] + " " + arr[arr.length - 1]);
} else
System.out.println(ans.maxsub + " " + ans.firstElement + " "
+ ans.lastElement);
}
}
class ans
{
static int maxsub = 0;
static int firstElement = 0;
static int lastElement = 0;
static int lastElementIndex = 0;
}
网易云数据结构- Maximum Subsequence Sum的更多相关文章
- 中国大学MOOC-陈越、何钦铭-数据结构-2015秋 01-复杂度2 Maximum Subsequence Sum (25分)
01-复杂度2 Maximum Subsequence Sum (25分) Given a sequence of K integers { N1,N2, ..., NK }. ...
- PAT Maximum Subsequence Sum[最大子序列和,简单dp]
1007 Maximum Subsequence Sum (25)(25 分) Given a sequence of K integers { N~1~, N~2~, ..., N~K~ }. A ...
- Algorithm for Maximum Subsequence Sum z
MSS(Array[],N)//Where N is the number of elements in array { sum=; //current sum max-sum=;//Maximum ...
- PAT1007:Maximum Subsequence Sum
1007. Maximum Subsequence Sum (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Y ...
- PTA (Advanced Level) 1007 Maximum Subsequence Sum
Maximum Subsequence Sum Given a sequence of K integers { N1, N2, ..., NK }. A continuous su ...
- 【DP-最大子串和】PAT1007. Maximum Subsequence Sum
1007. Maximum Subsequence Sum (25) 时间限制 400 ms 内存限制 32000 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Y ...
- PAT甲 1007. Maximum Subsequence Sum (25) 2016-09-09 22:56 41人阅读 评论(0) 收藏
1007. Maximum Subsequence Sum (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Y ...
- PAT 甲级 1007 Maximum Subsequence Sum (25)(25 分)(0不是负数,水题)
1007 Maximum Subsequence Sum (25)(25 分) Given a sequence of K integers { N~1~, N~2~, ..., N~K~ }. A ...
- PAT 1007 Maximum Subsequence Sum(最长子段和)
1007. Maximum Subsequence Sum (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Y ...
随机推荐
- Android生命周期注意事项
生命周期图解 以下英文引用全部来自google官方文档说明,方便理解. onCreate (Bundle savedInstan ...
- java静态成员的初始化过程
public class Price{ final static Price INSTANCE = new Price(2.8); static double initPrice = 20; doub ...
- 使用do...while的方法输入一个月中所有的周日
do{ var date = Number(prompt('请输入一个月的总天数')); var start = (prompt('请输入一个月的一号是周几')); for(var i=0;i< ...
- (转) Virtual function
原文地址:http://en.wikipedia.org/wiki/Virtual_function In object-oriented programming, a virtual functio ...
- [Leetcode] Container With Most Water ( C++)
题目: Given n non-negative integers a1, a2, ..., an, where each represents a point at coordinate (i, a ...
- Mysql开发技巧之删除重复数据
Mysql利用联表查询和分组来删除重复数据 //删除表中重复的id,保留最大的id mysql> select * from user; +----+------+ | id | name | ...
- MySQL行级锁、表级锁、页级锁详细介绍
原文链接:http://www.jb51.net/article/50047.htm 页级:引擎 BDB.表级:引擎 MyISAM , 理解为锁住整个表,可以同时读,写不行行级:引擎 INNODB , ...
- 15个顶级Java多线程面试题及回答
Java 线程面试问题 在任何Java面试当中多线程和并发方面的问题都是必不可少的一部分.如果你想获得任何股票投资银行的前台资讯职位,那么你应该准备很多关于多线程 的问题.在投资银行业务中多线程和并发 ...
- C语言超级经典400道题目
C语言超级经典400道题目 1.C语言程序的基本单位是____ A) 程序行 B) 语句 C) 函数 D) 字符.C.1 2.C语言程序的三种基本结构是____构A.顺序结构,选择结构,循环结 B.递 ...
- jmp指令
jmp指令可以是直接跳转也可以是间接跳转. 直接跳转ATT jmp Lable 无条件跳转,一般相对于PC 间接跳转ATT jmp *adr 无条件跳转,常见于switc语句中