[LeetCode]第164场周赛题解

第一题

没啥好说的,签到题。

public class Solution {
    public int minTimeToVisitAllPoints(int[][] p) {
        int ans=0;
        
        for(int i=1;i<p.length;i++) {
        	ans+=Math.max(Math.abs(p[i][0]-p[i-1][0]), Math.abs(p[i][1]-p[i-1][1]));
        }
        return ans;
    }
}

第二题

统计一下每行每列服务器个数就行了。

public class Solution {
	public int countServers(int[][] g) {
		int n=g.length;
		int m=g[0].length;
        int[] r=new int[n];
        int[] c=new int[m];
        
        for(int i=0;i<n;i++) {
        	for(int j=0;j<m;j++) {
        		if(g[i][j]==1) {
        			r[i]++;
        			c[j]++;
        		}
        	}
        }
        int ans=0;
        for(int i=0;i<n;i++) {
        	for(int j=0;j<m;j++) {
        		if(g[i][j]==1&&(r[i]>=2||c[j]>=2))
        			ans++;
        	}
        }
        return ans;
    }
}

第三题

想的太复杂了,其实数据范围这么小暴力即可,但pro的长度等于1e5该怎么处理呢,用字典树维护吗?知道的大佬请在下方评论,我将在第一时间回复您。

public class Solution {
	public List<List<String>> suggestedProducts(String[] pro, String word) {
		List<List<String>> ans=new ArrayList<List<String>>();
		List<String> buf=new ArrayList<String>();
		List<String> temp=new ArrayList<String>();
		for(String s:pro)
			buf.add(s);
		
		for(int i=0;i<word.length();i++) {
			temp.clear();
			for(String s:buf) {
				if(i>=s.length())
					continue;
				if(s.charAt(i)==word.charAt(i)) {
					temp.add(s);
				}
			}
			buf.clear();
			buf.addAll(temp);
			List<String> nowAns=new ArrayList<String>();
			Collections.sort(buf);
			for(int j=0;j<Math.min(3, buf.size());j++)
				nowAns.add(buf.get(j));
			ans.add(nowAns);
		}
		return ans;
    }
}

第四题

dp[i][j]表示第i步位于下标为j的方案数,直接转移即可。

public class Solution {
	public static final int Mod=(int) (1e9+7); 
	
	public int numWays(int sum, int n) {
		n=Math.min(n, sum);
        int[][] dp=new int[sum+1][n+1];          //dp[i][j]  表示第i步位于j的方案数
        dp[0][0]=1;
        
        for(int i=1;i<dp.length;i++) {
        	for(int j=0;j<=n;j++) {
        		dp[i][j]=(dp[i][j]+dp[i-1][j])%Mod;
        		if(j-1>=0)
        			dp[i][j]=(dp[i][j]+dp[i-1][j-1])%Mod;
        		if(j+1<n)
        			dp[i][j]=(dp[i][j]+dp[i-1][j+1])%Mod;
        	}
        }
        return dp[sum][0];
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章