小编Foo*_*Bar的帖子

如果从连续段中选取相同的数字,则计算最大总和

如果从连续段中选取相同的数字,则计算最大总和

[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)循环,我想不出任何解决方案

dynamic-programming

16
推荐指数
1
解决办法
509
查看次数

Predicate如何在Java 8中维护状态

我正在查看此代码并尝试理解以下代码.

复制自Stuart Marks的回答

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 <>()来维护状态;

java-8 java-stream

6
推荐指数
2
解决办法
1034
查看次数

带有生成器的Python闭包

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)

任何简单的解释为什么它可以在以下版本中使用?

python python-3.x

6
推荐指数
2
解决办法
242
查看次数

ES6承诺等待K out N承诺解决

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

编辑 - 2

我相信,从n号承诺中可以成功解决k号承诺

javascript ecmascript-6

5
推荐指数
1
解决办法
289
查看次数