• LeetCode 681. Next Closest Time


    原题链接在这里:https://leetcode.com/problems/next-closest-time/

    题目:

    Given a time represented in the format "HH:MM", form the next closest time by reusing the current digits. There is no limit on how many times a digit can be reused.

    You may assume the given input string is always valid. For example, "01:34", "12:09" are all valid. "1:34", "12:9" are all invalid.

    Example 1:

    Input: "19:34"
    Output: "19:39"
    Explanation: The next closest time choosing from digits 1, 9, 3, 4, is 19:39, which occurs 5 minutes later.  It is not 19:33, because this occurs 23 hours and 59 minutes later. 

    Example 2:

    Input: "23:59"
    Output: "22:22"
    Explanation: The next closest time choosing from digits 2, 3, 5, 9, is 22:22. It may be assumed that the returned time is next day's time since it is smaller than the input time numerically.

    题解:

    用当前time已经出现的四个数字,组成新的time. 找diff最小的新time.

    First get integer hash value of current time.

    Get all 4 digits of current time. Take 2 of them to construct hour, and the other 2 to construct minute.

    Use new time hash value - current time hash value and maintain the minimum diff.

    If minused result < 0, it is next day, add it with 24 * 60.

    Time Complexity: O(1). 共有4^4种组合.

    Space: O(1). size为4的HashSet.

    AC Java:

     1 class Solution {
     2     public String nextClosestTime(String time) {
     3         Set<Integer> hs = new HashSet<>();
     4         for(int i = 0; i<time.length(); i++){
     5             char c = time.charAt(i);
     6             if(c != ':'){
     7                 hs.add(c-'0');
     8             }
     9         }
    10         
    11         int cur = Integer.valueOf(time.substring(0, 2)) * 60 + Integer.valueOf(time.substring(3, 5)); 
    12         
    13         int minDiff = 24*60;
    14         // res is initialized as time, in case "11:11". The expected result is "11: 11".
    15         String res = time;
    16         for(int h1 : hs){
    17             for(int h2 : hs){
    18                 if(h1*10 + h2 < 24){
    19                     for(int m1 : hs){
    20                         for(int m2 : hs){
    21                             if(m1*10 + m2 < 60){
    22                                 int can = (h1*10+h2) * 60 + m1*10+m2;
    23                                 int diff = can-cur;
    24                                 if(diff < 0){
    25                                     diff += 24*60;
    26                                 }
    27                                 
    28                                 // diff can't 0, otherwise, it would return itself
    29                                 if(diff>0 && diff<minDiff){
    30                                     minDiff = diff;
    31                                     res = ""+h1+h2+":"+m1+m2;
    32                                     System.out.println("m1: "+ m1 + " m2: " + m2);
    33                                 }
    34                             }
    35                         }
    36                     }
    37                 }
    38             }
    39         }
    40         
    41         return res;
    42     }
    43 }
  • 相关阅读:
    Linux install
    plafrom library
    lua 线程
    plafrom SDK
    CSS中的focus-within伪类选择器
    网站打开速度优化_如何提高网页访问速度技巧方法总结
    网页预加载_骨架屏Skeleton Screen的实现
    SASS简介及使用方法
    什么是BFC布局——浅析BFC布局的概念以及作用
    JAVA面试题(九):JVM
  • 原文地址:https://www.cnblogs.com/Dylan-Java-NYC/p/7707622.html
Copyright © 2020-2023  润新知