[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];
    }
}

 

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