如果从连续段中选取相同的数字,则计算最大总和
[1,2,3,4] => answer 6
if 1 is picked from continuous segment [1,1,1,1] then sum is 4
if 2 is picked from continuous segment [2,3,4] then sum is 6 ,
[6,0,6,5,5,2] => answer 15, continuous segment [6,5,5] ,
5 can be picked from 3 elements.
[1,100,1,1] => answer 100, we can't pick 1 as 1+1+1+1 = 4 <100
Run Code Online (Sandbox Code Playgroud)
除了O(n ^ 2)循环,我想不出任何解决方案
我正在查看此代码并尝试理解以下代码.
public static <T> Predicate<T> distinctByKey(Function<? super T,Object> keyExtractor) {
Map<Object,Boolean> seen = new ConcurrentHashMap<>();
return t -> seen.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null;
}
BigDecimal totalShare = orders.stream()
.filter(distinctByKey(o -> o.getCompany().getId()))
.map(Order::getShare)
.reduce(BigDecimal.ZERO, BigDecimal::add);
Run Code Online (Sandbox Code Playgroud)
我的问题是每次调用distinctByKey并生成新的ConcurrentHashMap.如何使用新的ConcurrentHashMap <>()来维护状态; ?
def multipliers():
return [lambda x : i * x for i in range(4)]
print [m(2) for m in multipliers()]
Run Code Online (Sandbox Code Playgroud)
我部分理解(很危险)i所有功能都相同的原因,因为Python的闭包是后期绑定。
输出是[6, 6, 6, 6](不像[0, 2, 4, 6]我期望的那样)。
我看到它可以与生成器一起正常工作,我的预期输出来自以下版本。
def multipliers():
return (lambda x : i * x for i in range(4))
print [m(2) for m in multipliers()]
Run Code Online (Sandbox Code Playgroud)
任何简单的解释为什么它可以在以下版本中使用?
var p1 = new Promise((resolve, reject) => {
setTimeout(resolve, 1000, 'one');
});
var p2 = new Promise((resolve, reject) => {
setTimeout(resolve, 2000, 'two');
});
var p3 = new Promise((resolve, reject) => {
setTimeout(resolve, 3000, 'three');
});
Promise.all([p1,p2,p3]).then(values => {
console.log(values);
}, reason => {
console.log(reason)
});Run Code Online (Sandbox Code Playgroud)
我怎么能等待2个承诺才能完成?Promise.race()等待一个承诺完成.
我有许多承诺,我想要实现的是等待前k个承诺得到解决而不是触发一些事件.假设k <n
我相信,从n号承诺中可以成功解决k号承诺