子段求和
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1081
给出一个长度为N的数组,进行Q次查询,查询从第i个元素开始长度为l的子段所有元素之和。
例如,1 3 7 9 -1,查询第2个元素开始长度为3的子段和,1 {3 7 9} -1。3 + 7 + 9 = 19,输出19。
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1081
给出一个长度为N的数组,进行Q次查询,查询从第i个元素开始长度为l的子段所有元素之和。
例如,1 3 7 9 -1,查询第2个元素开始长度为3的子段和,1 {3 7 9} -1。3 + 7 + 9 = 19,输出19。
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1049
N个整数组成的序列a[1],a[2],a[3],…,a[n],求该序列如a[i]+a[i+1]+…+a[j]的连续子段和的最大值。当所给的整数均为负数时和为0。
例如:-2,11,-4,13,-5,-2,和最大的子段为:11,-4,13。和为20。
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1072
有2堆石子,A B两个人轮流拿,A先拿。每次可以从一堆中取任意个或从2堆中取相同数量的石子,但不可不取。拿到最后1颗石子的人获胜。
假设A B都非常聪明,拿石子的过程中不会出现失误。给出2堆石子的数量,问最后谁能赢得比赛。
例如:2堆石子分别为3颗和5颗。那么不论A怎样拿,B都有对应的方法拿到最后1颗。
在图书馆找有关 Java
的书时发现了这本动物出版社的书,大一时就听过 lambda
,匿名函数之类的了(虽然两者不同),一直没机会接触前者,鉴于前段时间写的程序有好多匿名函数,很是冗余,本着好奇以及打算重构的心,就借来这本书打算学习一遍 lambda
。本笔记按照章节顺序从第 2 章开始。
纸质书读起来很有滋味,建议买来或借来品味一番。
随书的资料在作者的 github 中可以下载到。
本笔记代码也全部放在 github 中,建议搭配代码食用~
使用 for
循环统计来自美国的艺术家:
1 | int count = 0; |
Collection
接口中新增了 stream
方法,如果继承它的子类没有实现 stream
方法,就使用它的 stream
方法,这样的方法叫默认方法。
Iterable
接口中也新增了一个默认方法:forEach
,允许用户使用 lambda
表达式作为循环体。
JDK
中 forEach
的实现方法:
标准语法:Classname::methodName
比如想得到艺术家的名字:
1 | lambda:artist -> artist.getName() |
构造方法同样可以缩写:
1 | lambda:(name, nationality) -> new Artist(name, nationality) |