Leetcode Weekly Contest 250(前三题)

题目链接: Leetcode Weekly Contest 250

写在前面:

本次周赛没有参加,在赛后进行模拟的,做出了前两道。

1、1935. Maximum Number of Words You Can Type

难度:Easy

题目大意:

详见题意。

思路:

按照题意模拟即可。

class Solution {
    public int canBeTypedWords(String text, String brokenLetters) {
        String[] arr=text.split(" ");
        char[] broken=brokenLetters.toCharArray();
        int res=0;
        for(String s:arr){
            boolean flag=true;
            for(int i=0;i<s.length();i++){
                for(int j=0;j<broken.length;j++){
                    if(s.charAt(i)==broken[j]){
                        flag=false;
                        break;
                    }
                }
                if(!flag){
                    break;
                }
            }
            if(flag){
                res++;
            }
        }
        return res;
    }
}

2、1936. Add Minimum Number of Rungs

难度:Medium

题目大意:

详见题意。

思路:

按照题意进行模拟,如果不能直接跳到下一个阶梯,就加阶梯,注意细节,判断高度差能否被dist整除,然后分情况讨论。

代码

class Solution {
    public int addRungs(int[] rungs, int dist) {
        int res=0;
        int diff=rungs[0];
        if(diff>dist){
            if(diff%dist==0){
                res+=((diff-dist)/dist);
            }
            else{
                res+=((diff-dist)/dist+1);
            }
        }
        for(int i=1;i<rungs.length;i++){
            diff=rungs[i]-rungs[i-1];
            if(diff>dist){
                if(diff%dist==0){
                    res+=((diff-dist)/dist);
                }
                else{
                    res+=((diff-dist)/dist+1);
                }
            }
        }
        return res;
    }
}

3、1937. Maximum Number of Points with Cost

难度:Medium

题目大意:

详见题意。

思路:

动态规划问题,假设 d p [ i ] [ j ] dp[i][j] dp[i][j]表示到达 p o i n t s [ i ] [ j ] points[i][j] points[i][j]所能获得的最高分值,则
d p [ i ] [ j ] = m a x { d p [ i − 1 ] [ j ′ ] − a b s ( j − j ′ ) + p o i n t s [ i ] [ j ] } dp[i][j]=max\left\{ dp[i-1][j^{'}]-abs(j-j^{'})+points[i][j]\right\} dp[i][j]=max{dp[i1][j]abs(jj)+points[i][j]}
即枚举在第 i − 1 i-1 i1行选择的格子 j ′ j^{'} j,注意 i = 0 i=0 i=0时上面公式不适用,要特殊处理。
但是这种思路会超时,需要进行优化,参考官方题解,思路比较巧妙。

代码

class Solution {
    public long maxPoints(int[][] points) {
        int m=points.length;
        int n=points[0].length;
        long[][] dp=new long[m][n];
        for(int i=0;i<m;i++){
            if(i==0){
                for(int j=0;j<n;j++){
                    dp[i][j]=points[i][j];
                }
            }
            else{
                long max=dp[i-1][0]+0;
                for(int j=0;j<n;j++){
                    max=Math.max(max,dp[i-1][j]+j);
                    dp[i][j]=max+points[i][j]-j;
                }
                max=dp[i-1][n-1]-(n-1);
                for(int j=n-1;j>=0;j--){
                    max=Math.max(max,dp[i-1][j]-j);
                    dp[i][j]=Math.max(dp[i][j],max+points[i][j]+j);
                }
            }
        }
        long res=dp[m-1][0];
        for(int j=0;j<n;j++){
            if(dp[m-1][j]>res){
                res=dp[m-1][j];
            }
        }
        return res;
    }
}

4、1938. Maximum Genetic Difference Query

难度:Hard

题目大意:

详见题目。

思路

暂时不会

代码

 //
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值