while ((start + end) / 2 != 0) {
Double mid = (start + end) / 2;
if (Math2.pow(mid, 3) < n) {
start = mid;
} else if (Math.abs(n - Math2.pow(mid, 3)) > Math2.pow(e, 3)) {
end = mid;
} else if (Math.abs(n - Math2.pow(mid, 3)) < Math2.pow(e, 3)) {
return mid;
}
}
return 0.0;
}
Java Stream API从Java9开始就有方法Stream::iterate
,因此表示迭代步骤/状态的类可以如下实现:
java prettyprint-override">class CubeSolver {
static final double EPS = 1E-06;
private double start, end, n, mid;
public CubeSolver(double s, double e, double n) {
this.start = s;
this.end = e;
this.n = n;
this.mid = (start + end) / 2;
}
// UnaryOperator<CubeSolver> for iteration
public CubeSolver next() {
if (done()) {
return this;
}
if (Math.pow(mid, 3) < n) {
start = mid;
} else if (Math.abs(n - Math.pow(mid, 3)) > EPS) {
end = mid;
}
return new CubeSolver(start, end, n);
}
// define end of calculation
public boolean done() {
return mid == 0 || Math.abs(n - Math.pow(mid, 3)) < EPS;
}
@Override
public String toString() {
return "root = " + mid;
}
}
然后基于流的解决方案如下所示:
开始
、结束
、n
stream::iterate
和hasnext
谓词创建有限的流2a)或使用旧的stream::iterate
不使用hasnext
,但使用stream::takewhile
操作有条件地限制流-自Java 9stream::reduce
获取流的最后一个元素CubeSolver seed = new CubeSolver(1.8, 2.8, 8);
CubeSolver solution = Stream
.iterate(seed, cs -> !cs.done(), CubeSolver::next)
.reduce((first, last) -> last) // Optional<CubeSolver>
.orElse(null);
System.out.println(solution);
产出:
root = 2.0000002861022947
在Java11中,添加了静态谓词::NOT
,因此使用TakeWhile
的2A解决方案可以如下所示:
CubeSolver seed = new CubeSolver(0, 7, 125);
CubeSolver solution = Stream
.iterate(seed, CubeSolver::next)
.takeWhile(Predicate.not(CubeSolver::done))
.reduce((first, last) -> last) // Optional<CubeSolver>
.orElse(null);
System.out.println(solution);
输出(对于EPS=1E-12):
root = 4.999999999999957
我正在尝试解决leetcode上的以下问题:硬币兑换2 输入:金额=5,硬币=[1,2,5]输出:4说明:有四种方法来弥补金额: 5=5 5=2 2 1 5=2 1 1 1 5=1 1 1 1 1 我试图实现一个迭代的解决方案,本质上模拟/模仿递归使用堆栈。我已经设法实现了它,解决方案有效,但它超过了时间限制。 我注意到递归解决方案利用记忆进行优化。我也想在我的迭代解决方案中包含这一点,但我不知道
本文向大家介绍Python实现链表反转的方法分析【迭代法与递归法】,包括了Python实现链表反转的方法分析【迭代法与递归法】的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Python实现链表反转的方法。分享给大家供大家参考,具体如下: Python实现链表反转 链表反转(while迭代实现): 链表的反转引入一个cur_node变量,表示当前节点;同时需要引入一个变量new_link表
合并和拆分迭代器 # itertools_chain.py from itertools import * for i in chain([1, 2, 3], ['a', 'b', 'c']): print(i, end=' ') print() # itertools_chain_from_iterable.py from itertools import * def make_
牛顿函数现在起作用了,我想展示网格中的哪些初始点产生收敛到-1的牛顿迭代,收敛到(1 (3)^1/2)/2我,鉴于: f(x)=x^31 我创建了一个网格来显示bi的哪些初始点收敛到根。
本文向大家介绍php实现转换ubb代码的方法,包括了php实现转换ubb代码的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了php实现转换ubb代码的方法。分享给大家供大家参考。具体如下: 希望本文所述对大家的php程序设计有所帮助。
本文向大家介绍Python实现迭代时使用索引的方法示例,包括了Python实现迭代时使用索引的方法示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Python实现迭代时使用索引的方法。分享给大家供大家参考,具体如下: 索引迭代 Python中,迭代永远是取出元素本身,而非元素的索引。 对于有序集合,元素确实是有索引的。有的时候,我们确实想在 for 循环中拿到索引,怎么办? 方法是使用