题解 | #ranko的手表#

ranko的手表

https://www.nowcoder.com/practice/37275e85ae7c4453920eae6b9f7f45fc

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
/**
思路:
1、最小间隔时间、最大间隔时间
2、第一次的小时、分钟,每一位单独处理
3、第二次小时分钟,每一位单独处理
4、注意各种特殊情况的处理,比如小时第二位,第一次比第二次大,就要将第一位+1
5、如果分钟,第一次比第二次大,就要将小时往前推,前提是第一次和第二次在所有值填充完了以后,小时相同
6、最大相差,直接去各自的极值,不用考虑各种重合情况 */
public class Main {
    public static void main(String[] args) throws IOException{
        BufferedReader buff = new BufferedReader(new InputStreamReader(System.in));
        //获取输入事件
        String time1 = buff.readLine();
        String time2 = buff.readLine();
        int min = Math.max(1, min(time1, time2));
        int max = max(time1,time2);
        System.out.println(min + " " + max);

    }

    //找到两个时间最小差距
    public static int min(String time1,String time2) {
        //取最大时间 
        //取时间1的时分
        String hour1 = time1.split(":")[0];
        String minute1 = time1.split(":")[1];

        //取最大时间 
        //获取时间2的时分
        String hour2 = time2.split(":")[0];
        String minute2 = time2.split(":")[1];

        //第一行小时如果是?
        if(hour1.charAt(0) == '?' && hour2.charAt(0) != '?') {
            hour1 = hour2.charAt(0) + "" + hour1.charAt(1);  
        }
        if(hour1.charAt(0) == '?' && hour2.charAt(0) == '?') {
            if(hour1.charAt(1)>hour2.charAt(1)) {
                hour1 = "0" + hour1.charAt(1);
                hour2 = "1" + hour2.charAt(1);
            }else {
                hour1 = "0" + hour1.charAt(1);
                hour2 = "0" + hour2.charAt(1);
            }
        }

        if(hour1.charAt(1) == '?') {
            if(hour1.charAt(0) == '2') {
                hour1 = hour1.charAt(0) + "3";
            }else {
                hour1 = hour1.charAt(0) + "9";
            }
        }

        if(minute1.charAt(0) == '?') {
            minute1 = "5" + minute1.charAt(1);
        } 

        if(minute1.charAt(1) == '?') {
            minute1 = minute1.charAt(0) + "9";
        }


        if(hour2.charAt(0) == '?') {
            if(hour1.charAt(1)> hour2.charAt(1)) {
               hour2 = (Integer.parseInt(hour1.charAt(0) + "") + 1) + "" + hour2.charAt(1);
            }
        }

        if(hour2.charAt(1) == '?') {
            if(hour1.charAt(0) == hour2.charAt(0)) {
              hour2 = hour2.charAt(0) + "" + hour1.charAt(1);
            }else {
              hour2 = hour2.charAt(0) + "0";
            }
        }
        if(minute2.charAt(0) == '?') {
            if(hour1.equals(hour2)) {
                minute2 = minute1.charAt(0)  + "" + minute2.charAt(1);
            }else {
                minute2 = "0" + minute2.charAt(1);
            }
        } 

        if(minute2.charAt(1) == '?') {
            if(hour1.equals(hour2) && (minute1.charAt(0) == minute2.charAt(0))) {
                minute2 = minute2.charAt(0) + "" + minute1.charAt(1);
            }else {
                minute2 = minute2.charAt(0) + "0";
            }
        }


        //小时相互减
        int resultH = Integer.parseInt(hour2) - Integer.parseInt(hour1);
        //分钟
        if(Integer.parseInt(minute2) < Integer.parseInt(minute1)) {
            if(resultH == 0) {
                resultH += 1;
            }
        }
        int minute = Integer.parseInt(minute2) - Integer.parseInt(minute1);
        return resultH*60 + minute;
    }

    //找到最大差距
    public static int max(String time1,String time2) {
                //取最大时间 
        //取时间1的时分
        String hour1 = time1.split(":")[0];
        String minute1 = time1.split(":")[1];

        //取最大时间 
        //获取时间2的时分
        String hour2 = time2.split(":")[0];
        String minute2 = time2.split(":")[1];

        //第一位小时如果是?
        if(hour1.charAt(0) == '?') {
           hour1 = "0" + hour1.charAt(1);
        }

        if(hour1.charAt(1) == '?') {
            hour1 = hour1.charAt(0) + "0";
        }

        if(minute1.charAt(0) == '?') {
            minute1 = "0" + minute1.charAt(1);
        } 

        if(minute1.charAt(1) == '?') {
            minute1 = minute1.charAt(0) + "0";
        }


        //第二行的时间
        if(hour2.charAt(0) == '?') {
            hour2 = "2" + hour2.charAt(1);
        }

        if(hour2.charAt(1) == '?') {
            if(hour2.charAt(0) == '2') {
                hour2 = hour2.charAt(0) + "3";
            }else {
                hour2 = hour2.charAt(0) +  "9";
            }
        }

        if(minute2.charAt(0) == '?') {
            minute2 = "5" + minute2.charAt(1);
        } 

        if(minute2.charAt(1) == '?') {
            minute2 = minute2.charAt(0) + "9";
        }
        //小时相互减
        int resultH = Integer.parseInt(hour2) - Integer.parseInt(hour1);
        //分钟
        int minute = Integer.parseInt(minute2) - Integer.parseInt(minute1);
        return resultH*60 + minute;
    }

}

全部评论
哥们,牛客样例还是太不全面了,我自创了个样例,你的代码是过不了的。 1?:11 18:59 按理来说这种最小时间应该是18:11 到18:59的时间差,即48分钟。但是你的代码没有考虑这种情况,导致结果为1分钟。
点赞 回复 分享
发布于 02-19 10:55 北京

相关推荐

重生我想学测开:嵌入式的问题,我准备入行京东外卖了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务