题解 | #合唱团#

合唱团

http://www.nowcoder.com/practice/661c49118ca241909add3a11c96408c8

HashMap为何改为尾插法

import java.util.;
import java.lang.
;
public class Main{
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
while(scanner.hasNextInt()){
int n = scanner.nextInt();
int[] abilities = new int[n];
for(int i =0;i<n;i++){
abilities[i] = scanner.nextInt();
}
int k = scanner.nextInt();
int d = scanner.nextInt();
long res = getRes(n,abilities,k,d);
System.out.println(res);
}
}
public static long getRes(int n,int[] abilities,int k,int d){
if(k == 1){
long ans = Long.MIN_VALUE;
for(int i =0;i<abilities.length;i++){
if(abilities[i] > ans){
ans = abilities[i];
}
}
return ans;
}
long[][] dp = new long[n][k+1];
long[][] dp_min = new long[n][k+1];
for(int i =0;i<dp.length;i++){
Arrays.fill(dp[i],Long.MIN_VALUE);
Arrays.fill(dp_min[i],Long.MAX_VALUE);
}
for(int i =0;i<dp.length;i++){
dp[i][1] = abilities[i];
dp_min[i][1] = abilities[i];
}
long res = Long.MIN_VALUE;
for(int i =0;i<n;i++){
refreshDp(dp,dp_min,abilities,i,d);
res = Math.max(res,dp[i][k]);
}
return res;
}
public static void refreshDp(long[][] dp,long[][] dp_min,int[] abilities,int index ,int d){
for(int i = index-1;i>=index - d;i--){
if(i < 0){break;}
for(int k = 2;k<dp[1].length;k++){
if(abilities[index] >= 0){
if(dp[i][k-1] != Long.MIN_VALUE){
dp[index][k] = Math.max(dp[index][k],dp[index][1] * dp[i][k-1]);
}
if(dp_min[i][k-1] != Long.MAX_VALUE){
dp_min[index][k] = Math.min(dp_min[index][k],dp_min[index][1] * dp_min[i][k-1]);
}
}else{
if(dp_min[i][k-1] != Long.MAX_VALUE){
dp[index][k] = Math.max(dp[index][k],dp_min[index][1] * dp_min[i][k-1]);
}
if(dp[i][k-1] != Long.MIN_VALUE){
dp_min[index][k] = Math.min(dp_min[index][k],dp_min[index][1] * dp[i][k-1]);
}
}
}
}
}
}

全部评论

相关推荐

03-04 15:02
已编辑
南京大学 Java
3.3&nbsp;一面岗位:&nbsp;后台开发部门:&nbsp;腾讯云场景题偏多,没问项目,没手撕,时长半小时1.&nbsp;自我介绍2.&nbsp;Java基础:-&nbsp;Treemap&nbsp;&amp;&nbsp;HashMap区别-&nbsp;ArrayList,&nbsp;添加n个数(n较大),会发生什么(应该是想问ArrayList的扩容机制)-&nbsp;考虑扩容的情况下这个过程的复杂度多少(说明复杂度计算思路即可,不需要给出具体的复杂度)3.&nbsp;并发:-&nbsp;项目里怎么用多线程的(一开始答了具体场景,不过面试官想听的是线程池,Synchronized这些...)-&nbsp;volatile&nbsp;&amp;&nbsp;synchronized-&nbsp;这里还问了一个,不过忘了...-&nbsp;假设项目里用了很多synchronized拖慢了系统效率,让你重构项目,你怎么设计?&nbsp;(真不会,回了一个参考乐观锁的设计用版本号之类的,然后这个话题就过了)4.&nbsp;JVM-&nbsp;JVM垃圾回收,怎么判断对象有没有被引用?&nbsp;(可达性分析)-&nbsp;GC&nbsp;Root有哪些-&nbsp;遇到OOM怎么排查5.&nbsp;场景-&nbsp;设计一个数据结构,用于在搜索框中搜索人名(不知道是不是这个意思,答了字典树这个结构)-&nbsp;使用字典树存储的话空间复杂度是多少(同前面,给出计算思路就行,不需要具体的值)-&nbsp;问了下简历上项目的背景,项目的具体内容没问-&nbsp;项目里的难点/印象深刻的点,咋解决的-&nbsp;针对上一点提了一个发散性的场景题(让你设计个xxx,你的思路)然后反问,无手撕。---春招第一面,被场景设计问题拷打麻了,就当练习了,不敢奢望能过,后续随缘了3.4更新,已挂
_追梦旅人_:大家考虑深圳睿联不,我们正在春招,可在我主页看岗位,感兴趣可直接投递~
查看15道真题和解析
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务