当前位置: 首页 > Web前端 > HTML

上岸算法LeetCode周赛264题解题报告

时间:2023-03-29 13:12:01 HTML

【NO.1句子有效词数】签到题解题思路。代码展示classSolution{publicintcountValidWords(Stringsentence){String[]words=sentence.split("");整数计数=0;for(varword:words){char[]chars=word.trim().toCharArray();布尔值无效=假;整数指数=-1;对于(inti=0;i0&&(isNotAlpha(chars[index-1])||isNotAlpha(chars[index+1]))){继续;}计数++;}返回rn计数;}booleanisNotAlpha(charc){return'a'>c||c>'z';}}[NO.2下一个较大的数值余额数]枚举解题思路可以代码展示classSolution{publicintnextBeautifulNumber(intn){for(inti=n+1;;i++){如果(余额(i)){返回i;}}}privatebooleanbalance(intnum){int[]cnt=newint[10];for(;num>0;num/=10){cnt[num%10]++;}for(inti=0;i<10;i++){if(cnt[i]!=0&&cnt[i]!=i){returnfalse;}}returntrue;}}【NO.3统计得分最高的节点个数】解题思路是先做一次DFS,求出每个节点的子树大小。然后进行一次DFS,求出每个节点的得分。注意小数的计算需要使用Long类型,避免乘法溢出。代码展示classSolution{LongmaxScore;Mapcount;publicintcountHighestScoreNodes(int[]parents){List>children=newArrayList<>();for(inti=0;i());}for(inti=1;i();calcMaxScore(0,sum,children);返回count.get(maxScore);}privatevoidcalcMaxScore(intcur,int[]sum,List>children){longscore=1;for(varnxt:children.get(cur)){score*=sum[nxt];}if(sum[0]-sum[cur]>0){score*=sum[0]-sum[cur];}count.put(score,count.getOrDefault(score,0)+1);maxScore=Math.max(maxScore,分数);对于(varnxt:children.get(cur)){calcMaxScore(nxt,总和,孩子们);}}privatevoidcalcSum(intcur,int[]sum,List>children){sum[cur]=1;for(varnxt:children.get(cur)){calcSum(nxt,sum,children);总和[cur]+=总和[nxt];}}}【NO.4并行课三】解题思路差不多是树型DP模板题,比较简单。finish(i)表示完成课程i的最短时间,则finish(i)=max(finish(j))+time[i],其中j为i的前导课程。代码展示classSolution{publicintminimumTime(intn,int[][]relations,int[]time){List>prev=newArrayList<>();for(inti=0;i());}for(int[]rel:relations){prev.get(rel[1]-1).add(rel[0]-1);}int[]mem=newint[n];整数结果=0;for(inti=0;i>prev,int[]time,int[]mem){if(mem[cur]>0){returnmem[cur];}if(prev.get(cur).size()==0){返回时间[cur];}for(intp:prev.get(cur)){mem[cur]=Math.max(mem[cur],finish(p,prev,time,mem)+time[cur]);}返回内存[cur];}}