这次周赛,我也难得做出来了三道题,最后排名停留在2525/7500,感觉自己之前的刷题也多少是积累了一点题感的,虽说不能立刻想出思路,但起码是有了点眉头就敢下笔做,放在半年前的我,这是很难想象的。
虽说大佬们很轻松就秒掉了,我甚至有些磕磕碰碰才做出三题,最后看到大佬们的题解,发现又是如此的简洁明了,整个下来就是感觉道阻且长啊。
T1.矩阵中的局部最大值
我直接一个拙劣的遍历过了。
class Solution {
public int[][] largestLocal(int[][] grid) {
int n=grid.length;
int[][] ans=new int[n-2][n-2];
for(int i=0;i<=n-3;i++){
for(int j=0;j<=n-3;j++){
int max=0;
for(int ii=i;ii<i+3;ii++){
for(int jj=j;jj<j+3;jj++){
max=Math.max(max,grid[ii][jj]);
}
}
ans[i][j]=max;
}
}
return ans;
}
}
T2.边积分最高的节点
再次一个拙劣的遍历,但是WA了一发int溢出,看来以后求和的时候,得下意识反应一下是不是会溢出,这题2 <= n <= 10^5
,10^5*10^5
是需要long long来表示的。
class Solution {
public int edgeScore(int[] edges) {
int len=edges.length;
long[]res=new long[len];
long ans=0;
int idx=0;
for(int i=0;i<len;i++){
res[edges[i]]+=i;
}
for(int i=0;i<len;i++){
if(res[i]>ans){
ans=res[i];
idx=i;
}
}
return idx;
}
}
T3.根据模式串构造最小数字
这题我是用回溯做的,看到大家的遍历都很简单,但我感觉这是最适合我思考方式的解法了,也就是像全排列一样一个一个去试,最后把所有可能的排列结果找出来,选出字典序最小的。
其中改了个bug,就是我在回溯返回的时候,就把path中的数字全部弹出了,这步应该放到回溯函数执行以后,否则就会爆NoSuchElementException。
class Solution {
LinkedList<Integer> path=new LinkedList<>();
ArrayList<String> ans=new ArrayList<>();
boolean[] vis=new boolean[10];
int len;
public String smallestNumber(String pattern) {
len=pattern.length();
for(int i=1;i<=9;i++){
path.addLast(i);
vis[i]=true;
backTracing(pattern,0);
vis[i]=false;
path.removeLast();
}
String res=ans.get(0);
for(int i=1;i<ans.size();i++){
if(res.compareTo(ans.get(i))>0){
res=ans.get(i);
}
}
return res;
}
public void backTracing(String pattern,int index){
if(path.size()==len+1){
StringBuilder sb=new StringBuilder();
for(int i=0;i<path.size();i++){
sb.append(path.get(i));
}
ans.add(sb.toString());
return;
}
char c=pattern.charAt(index);
if(c=='I'){
for(int i=1;i<=9;i++){
if(vis[i]==false&&i>path.peekLast()){
vis[i]=true;
path.addLast(i);
backTracing(pattern,index+1);
path.removeLast();
vis[i]=false;
}
}
}else{
for(int i=1;i<=9;i++){
if(vis[i]==false&&i<path.peekLast()){
vis[i]=true;
path.addLast(i);
backTracing(pattern,index+1);
path.removeLast();
vis[i]=false;
}
}
}
}
}
T4.统计特殊整数
这题是真把我难住了,本来以为是找规律题,只需要所有数字中减去满足条件的数字就行了,结果出来好像也只是我这么想想,听大佬们说是数位dp,确实是我没接触过的类型了,得学学。
参考灵神的模板,这水平太高了,完全没弄明白,需要好好补一下。