我在Hackerrank上练习。好吧,这个问题非常简单,我在这里通过示例输入来附加它。当我使用自定义输入运行到本地计算机时,其工作正常。但是,当我在其在线平台上运行时,有时2个,有时3个测试用例因超时异常而失败。代码在下面,任何人都可以提出需要改进的地方?
这是解决方案
public static void main(String[] args) {
int k = 3;
List<Integer> marks = new ArrayList<Integer>();
marks.add(20);
marks.add(20);
marks.add(40);
marks.add(60);
marks.add(20);
marks.add(10);
marks.add(0);
marks.add(100);
System.out.println(numofPrizes(k, marks));
}
public static int numofPrizes(int k, List<Integer> list) {
// Write your code here
Collections.sort(list, Collections.reverseOrder());
List<Integer> str = new ArrayList<Integer>();
AtomicInteger rank = new AtomicInteger(0);
AtomicInteger count = new AtomicInteger(0);
list.stream().forEach(x -> {
if(!str.contains(x)){
rank.getAndIncrement();
}
if(rank.get() <= k && x > 0){
count.getAndIncrement();
}
str.add(x);
// System.out.println("mark " + x + " rank " + rank.get() + " count " + count.get() );
});
return count.get();
}
输出:
mark 100 rank 1 count 1
mark 60 rank 2 count 2
mark 40 rank 3 count 3
mark 20 rank 4 count 3
mark 20 rank 4 count 3
mark 20 rank 4 count 3
mark 10 rank 5 count 3
mark 0 rank 6 count 3
3
当我仅更改如下方法时,它就起作用了。
public static void main(String[] args) {
int k = 3;
List<Integer> marks = new ArrayList<Integer>();
marks.add(20);
marks.add(20);
marks.add(40);
marks.add(60);
marks.add(20);
marks.add(10);
marks.add(0);
marks.add(100);
System.out.println(numofPrizes(k, marks));
}
public static int numofPrizes(int k, List<Integer> list) {
list.sort(Collections.reverseOrder());
int number = 0,counter = 1;
int[] mark = new int[list.size()],rank = new int[list.size()];
Map<Integer,Integer> map = new HashMap<Integer,Integer>();
for (int i = 0; i < list.size(); i++) {
map.put(list.get(i), (map.get(list.get(i)) != null) ? map.get(list.get(i)) : counter);
mark[i] = list.get(i);
rank[i] = (int) map.get(list.get(i));
counter++;
if(mark[i] > 0 && k >= rank[i]){
number++;
}
}
return number;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句