53、最小时间差

题目描述:
给定一个 24 小时制(小时:分钟)的时间列表,找出列表中任意两个时间的最小时间差并已分钟数表示。

示例 1:

输入: [“23:59”,“00:00”]
输出: 1

备注:

列表中时间数在 2~20000 之间。
每个时间取值在 00:00~23:59 之间。
代码

class Solution {
    public int findMinDifference(List<String> timePoints) {
        List<Integer> tem = new ArrayList<>();
		for (String string : timePoints) {
			int index = string.indexOf(":");
			int hour = Integer.parseInt(string.substring(0, index));
			int min = Integer.parseInt(string.substring(index + 1));
				tem.add(hour * 60 + min);
		}
		Collections.sort(tem,new Comparator<Integer>() {
			@Override
			public int compare(Integer o1, Integer o2) {
				
				return o1.compareTo(o2);
			}

		});
        int min = Integer.MAX_VALUE;
		for (int i = 0; i < tem.size() - 1; i++) {
			min = Math.min(tem.get(i + 1) - tem.get(i), min);
            if(min == 0){
				return min;
			}
		}
		int last = Math.min(tem.get(tem.size() - 1) - tem.get(0), 1440 - tem.get(tem.size() - 1) + tem.get(0));
        min = Math.min(min, last);
		System.out.println(tem.toString());
		return min;
    }
}

排名靠前的代码

class Solution {
    public int findMinDifference(List<String> timePoints) {
        int res;
        int l = timePoints.size();
        int [] a=new int [1440];
        int first=-1,last=-1;
        int min=-1;
        int i=0,j,k;
        for(String s:timePoints){
            k=(s.charAt(0)-'0')*600+(s.charAt(1)-'0')*60+(s.charAt(3)-'0')*10+(s.charAt(4)-'0');
            a[k]++;
            if(a[k]>1)return 0;
            i++;
        }
        if(min<0){
            for(first=0;a[first]==0;first++);
            for(last=1439;a[last]==0;last--);
            min=last-first;
            if(min>720)min=1440-min;
            i=first;
            for(j=i+1;j<=last;j++)if(a[j]>0){
                if(j-i<min)min=j-i;
                i=j;
            }
        }
        return min;
    }
}

猜你喜欢

转载自blog.csdn.net/qq_34446716/article/details/88582734