字符串 leetcode 539. 最小时间差

题目内容

给定一个 24 小时制(小时:分钟 “HH:MM”)的时间列表,找出列表中任意两个时间的最小时间差并以分钟数表示。

示例 1:

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

示例 2:

输入:timePoints = [“00:00”,“23:59”,“00:00”]
输出:0

提示:

2 <= timePoints <= 2 * 104
timePoints[i] 格式为 "HH:MM"

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/minimum-time-difference

c语言解答(哈希表)

int findMinDifference(char ** timePoints, int timePointsSize){
    //数量超过总共最大的数了,肯定重复,最多存在1440个不同的时间
    if(timePointsSize>=1440){
        return 0;
    }
    //空间申请和初始化
    int* hash = (int*)malloc(sizeof(int) * 1440);
    memset(hash, 0, sizeof(int) * 1440);
    // int hash[1440]={0};
    int hour, minu;
    int max=0,min=1439;
    for (int i = 0; i < timePointsSize; ++i) {
        //将字符串转换成整数
        sscanf(timePoints[i], "%d:%d", &hour, &minu);
        int temp=hour*60 + minu;
        //找最小值
        if(temp>max){
            max=temp;
        }
        //找最大值
        if(temp<min){
            min=temp;
        }
        //如果有时间重复,直接返回0
        if(hash[temp]==1){
            return 0;
        }
        hash[temp]=1;
    }
    //直接把特殊情况当做cha,23::59  和 00::00差为1
    int cha=min+1440-max;
    int bian=min;
    //从最小值到最大值遍历,求最小差
    for(int i=min+1;i<=max;i++){
        if(hash[i]==1){
            if(i-bian<cha){
                //更新最小差
                cha=i-bian;
            }
            //用bian保留下一个元素需要减的数
            bian=i;
        }
    }
    return cha;
}

java语言解答

class Solution {
    public int findMinDifference(List<String> timePoints) {
         //数量超过总共最大的数了,肯定重复,最多存在1440个不同的时间
        if(timePoints.size()>=1440){
            return 0;
        }
        //数组声明和初始化
        int [] hash=new int [1440];
        for(int i=0;i<1440;i++){
            hash[i]=0;
        }
        int hour, minu;
        int max=0,min=1439;
        for (int i = 0; i < timePoints.size(); i++) {
            //将字符串转换成整数
            
            int temp=minute(timePoints.get(i));
            //找最小值
            if(temp>max){
                max=temp;
            }
            //找最大值
            if(temp<min){
                min=temp;
            }
            //如果有时间重复,直接返回0
            if(hash[temp]==1){
                return 0;
            }
            hash[temp]=1;
        }
            //直接把特殊情况当做cha,23::59  和 00::00差为1
        int cha=min+1440-max;
        int bian=min;
        //从最小值到最大值遍历,求最小差
        for(int i=min+1;i<=max;i++){
            if(hash[i]==1){
                if(i-bian<cha){
                    //更新最小差
                    cha=i-bian;
                }
                //用bian保留下一个元素需要减的数
                bian=i;
            }
        }
        return cha;

    }
    public int minute(String s) {
        return Integer.parseInt(s.substring(0, 2)) * 60 + Integer.parseInt(s.substring(3, 5));
    }

}

leetcode题解中圈友将时间字符串转化的分钟的三种方法 : 链接地址

public int minute(String s) {
    String[] strs = s.split(":");
    return Integer.parseInt(strs[0]) * 60 + Integer.parseInt(strs[1]);
}

public int minute(String s) {
    return Integer.parseInt(s.substring(0, 2)) * 60 + Integer.parseInt(s.substring(3, 5));
}

快,结果并不是真正的时间,但是差不变。(两数加上相等数,差值不变)

public int minute(String s) {
    return s.charAt(0) * 600 + s.charAt(1) * 60 + s.charAt(3) * 10 + s.charAt(4);
}

作者:zyxwmj
链接:https://leetcode-cn.com/problems/minimum-time-difference/solution/pai-xu-1-ms10000-by-zyxwmj-zkaz/
来源:力扣(LeetCode)

总结:

数组更新和初始化,原本指导但是从来不用,现在开始用了
int* hash = (int*)malloc(sizeof(int) * 1440);
memset(hash, 0, sizeof(int) * 1440);
将字符串转换成整数  类似当时python学习的正则表达式,提取出来指定内容存起来
sscanf(timePoints[i], "%d:%d", &hour, &minu);

自己提交成功后,然后再看看大家的题解,也能从中学到不少.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值