今天和同事聊天,他說最近他的女朋友在面試時被問到「給定一個值n,請求所有小於n且為3或5的不重複倍數的總和」。
接著就開始在白板想一下流程啦。馬上想到解決不重複的方式就是用Set
,先算出3或5的倍數並放進Set
中即可消除重複的值,最後再加總Set
裡的值即可。
package com.abc.demo;
import java.util.*;
public class Main {
public static void main(String[] args) {
System.out.println(calculateSumOfNoRepeatMultiple(10, 3, 5));
}
private static int calculateSumOfNoRepeatMultiple(int n, int... vv) {
Set set = new HashSet<>();
for(int v : vv) {
for(int i = 0 ; i <= n ; i++) {
if (i % v == 0) {
set.add(i);
}
}
}
return set.stream().reduce(0, Integer::sum);
}
}
時間複雜度"應該"是O(N)。
沒有留言:
張貼留言