2019 力扣杯全国秋季编程大赛

图片说明

int game(int* guess, int guessSize, int* answer, int answerSize){
    int ans = 0 ;
    for (int i = 0 ; i < guessSize ; i++){
        if(answer[i]==guess[i])
            ans++;
    }
    return ans;
}

图片说明

class Solution {
    static long gcd(long a , long b){
        long c = a % b;
        if(c == 0)return b;
        return gcd(b ,c );
    }
    public int[] fraction(int[] cont) {
        int len = cont.length-1;
        long temp1 = cont[len--];
        long temp2 = 1;
        int ans [] = new int [2];

        while(len>= 0){
            long flag = temp1 * cont[len] +temp2;     //核心一步
            temp2 = temp1;                            //核心一步
            temp1 = flag ;                            //核心一步
            len--;
        }
        long gcd = gcd(temp1 , temp2);
        ans[0] = (int)(temp1 / gcd);
        ans[1] = (int)(temp2 / gcd);
        return ans;
    }
}

图片说明
第三题第一种做法 超时

class Solution {
    public boolean robot(String command, int[][] obstacles, int x, int y) {
        boolean [][] bool = new boolean [x+1][y+1];
        for(int i = 0 ; i < obstacles.length ; i ++){
            int x1 = obstacles[i][0];
            int y1 = obstacles[i][1];
            if(x1<=x&&y1<=y)
                bool[x1][y1] = true;
        }
        int x2 = 0 ;
        int y2 = 0 ;
        int flag = 0;
        int len = command.length();
        while(x2 < x && y2 < y){
            char temp = command.charAt(flag%len);
            if(temp == 'U')y2++;
            if(temp == 'R')x2++;
            if(bool[x2][y2]==true)return false;
            flag ++;
        }

        while(x2 < x){
            char temp = command.charAt(flag%len);

            if(temp == 'U')return false;
            if(temp == 'R')x2++;
            flag ++;
        }

        while( y2 < y){
            char temp = command.charAt(flag%len);
            if(temp == 'U')y2++;
            if(temp == 'R')return false;
            flag ++;
        }

        if(x2==x&&y2==y)return true;
        return false;
    }
}

第二种做法 ac 优化第一种

class Solution {
    public boolean robot(String command, int[][] obstacles, int x, int y) {
        Map<Integer,Set<Integer>>map = new HashMap();
        for(int i = 0 ; i < obstacles.length ; i ++){
            int a = obstacles[i][0];
            int b = obstacles[i][1];
            if (!map.containsKey(a)) map.put(a, new HashSet<>()); 
            map.get(a).add(b);
        }
        int r = 0, u = 0;
        while (true) {
            for (char ch: command.toCharArray()) {  //这一步处理得很好
                if (r == x && u == y) return true;
                switch (ch) {
                    case 'U': ++u; break;
                    case 'R': ++r; break;
                }
                if (map.containsKey(r) && map.get(r).contains(u)) return false;
                if (r > x || u > y) return false;
            }
        }
    }
}

第三种解法 比较实际点 判断前面障碍是否能达到,判断终点是否能到达

class Solution {
    private static char command_char[];
    private static int command_R;
    private static int command_U;
    public boolean robot(String command, int[][] obstacles, int x, int y) {
        init(command);
        if(!arrive(x,y))return false;
        for(int i = 0 ; i < obstacles.length ;i++){
            int dx = obstacles[i][0];
            int dy = obstacles[i][1];
            if(dx <= x && dy <= y&&arrive(dx,dy)) return false;
        }
        return true;
    }
    private static boolean arrive(int dx , int dy){
        int t = Math.min(dx/command_R,dy/command_U);
        dx -= t* command_R;
        dy -= t* command_U;
        if(dx==0&&dy==0)return true;
        for(char c : command_char ){
            if(c == 'U')dy--;
            else dx--;
            if(dx==0&&dy==0)return true;
        }
        return false;
    }
    private static void init(String command){
        command_R = 0;
        command_U = 0;
        command_char = command.toCharArray();
        for(char c :command_char){
            if(c=='U'){
                command_U++;
            }
            else command_R++;
        }
    }
}
全部评论
第三题第二种解法是第一种的简化 不过很有可能会导致溢出
点赞 回复 分享
发布于 2019-09-26 08:33

相关推荐

粗心的雪碧不放弃:纯学历问题,我这几个月也是一直优化自己的简历,后来发现优化到我自己都觉得牛逼的时候,发现面试数量也没有提升,真就纯学历问题
点赞 评论 收藏
分享
ProMonkey2024:5个oc?厉害! 但是有一个小问题:谁问你了?😡我的意思是,谁在意?我告诉你,根本没人问你,在我们之中0人问了你,我把所有问你的人都请来 party 了,到场人数是0个人,誰问你了?WHO ASKED?谁问汝矣?誰があなたに聞きましたか?누가 물어봤어?我爬上了珠穆朗玛峰也没找到谁问你了,我刚刚潜入了世界上最大的射电望远镜也没开到那个问你的人的盒,在找到谁问你之前我连癌症的解药都发明了出来,我开了最大距离渲染也没找到谁问你了我活在这个被辐射蹂躏了多年的破碎世界的坟墓里目睹全球核战争把人类文明毁灭也没见到谁问你了(别的帖子偷来的,现学现卖😋)
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务