Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 实施;“24小时时间”;使用数字数组_Algorithm_Sorting - Fatal编程技术网

Algorithm 实施;“24小时时间”;使用数字数组

Algorithm 实施;“24小时时间”;使用数字数组,algorithm,sorting,Algorithm,Sorting,我最近在一次考试中被问到一个问题。 我将得到一个由4个数字组成的数组,使用它我必须构建尽可能大的24小时时间格式。 例如:如果输入数组是[1,3,5,2],答案将是“23:51”。 如果输入数组为[1,1,5,0],则答案为“15:10” 我试过了,确实成功了,但还很初级。我基本上必须为每个时间位置制作4个不同的数组,并与输入数组进行比较 使用任何语言(c、c#、objC或任何其他语言)实现的不同方法都会有很大帮助。我似乎无法理解我的逻辑 找到最大的数字 如果合法,则将该数字放在前面(第一个位置

我最近在一次考试中被问到一个问题。 我将得到一个由4个数字组成的数组,使用它我必须构建尽可能大的24小时时间格式。 例如:如果输入数组是[1,3,5,2],答案将是“23:51”。 如果输入数组为[1,1,5,0],则答案为“15:10”

我试过了,确实成功了,但还很初级。我基本上必须为每个时间位置制作4个不同的数组,并与输入数组进行比较

使用任何语言(c、c#、objC或任何其他语言)实现的不同方法都会有很大帮助。我似乎无法理解我的逻辑

  • 找到最大的数字
  • 如果合法,则将该数字放在前面(第一个位置为0、1或2)。如果不是,找到最大的合法号码并放在第一位
  • 用第二、第三等最大数字重复1-2,直到找到前面的合法数字
  • 重复1-3秒到前面、秒到最后和最后
  • 如果最后出现非法数字,则将这些非法数字与生成最新时间的较早数字交换

  • 由于只有4个数字,我将生成所有可能的时间戳(即
    4!
    ,即
    24
    ),对它们进行排序,并找到最大的有效时间戳

    如何检查
    t
    是否为有效的24小时时间戳

    • t
      最多4位,即
      t mod 10000==0
    • 最后两位数字(
      t mod 100
      )是有效的分钟值,即在
      [0-59]
    • 前两位(
      t div 100
      )是有效的小时值,即在
      [0-23]

      • 这不是完整的答案,只是@arun的补充部分。 为了检查有效的时间戳,我假设时间戳的形式是ab:cd,其中a,b,c,d是数字

        • a应介于0和2之间

        • 如果a小于2,则b全部有效。 否则,b应为0到3

        • c应该是从0到5

        • d全部有效

        可以使用以下约束:

        • 生成后检查有效时间戳的步骤 或
        • 使用它们生成

        只想分享一个可行的解决方案。不一定有效率

        import java.util.ArrayList;
        import java.util.Collections;
        import java.util.List;
        
        
        public class Test {
        
            public static void main(String[] args) throws Exception {
                int[] input = {1,2,6,7};
                System.out.println(getLargestTime(input)+" is the largest time!");
            }
        
            public static String getLargestTime(int[] input) {
                String largestTime = "00:00";
                String str = input[0]+""+input[1]+""+input[2]+""+input[3];
                List<String> times = new ArrayList<>();
                permutation(str, times);
                Collections.sort(times, Collections.reverseOrder());
                for (String t: times) {
                    int hours = Integer.parseInt(t) / 100;
                    int minutes = Integer.parseInt(t) % 100;
                    if (hours < 24 && minutes < 60) {
                        if (hours < 10 && minutes < 10) {
                            largestTime = "0"+hours+":0"+minutes;
                        } else if (hours < 10) {
                            largestTime = "0"+hours+":"+minutes;
                        } else if (minutes < 10) {
                            largestTime = hours+":0"+minutes;
                        } else {
                            largestTime = hours+":"+minutes;
                        }               
                    }
                }
                return largestTime;
            }
        
            public static void permutation(String str, List<String> list) { 
                permutation("", str, list); 
            }
        
            private static void permutation(String prefix, String str, List<String> list) {
                int n = str.length();
                if (n == 0) list.add(prefix);
                else {
                    for (int i = 0; i < n; i++)
                        permutation(prefix + str.charAt(i), str.substring(0, i) + str.substring(i+1, n), list);
                }
            }
        
        }
        
        import java.util.ArrayList;
        导入java.util.Collections;
        导入java.util.List;
        公开课考试{
        公共静态void main(字符串[]args)引发异常{
        int[]输入={1,2,6,7};
        System.out.println(getLargestTime(输入)+“是最大时间!”);
        }
        公共静态字符串getLargestTime(int[]输入){
        字符串largestTime=“00:00”;
        字符串str=input[0]+“”+input[1]+“”+input[2]+“”+input[3];
        列表时间=新建ArrayList();
        排列(str,次);
        Collections.sort(times,Collections.reverseOrder());
        for(字符串t:次){
        整小时=整数。parseInt(t)/100;
        int分钟=整数。parseInt(t)%100;
        如果(小时<24和分钟<60){
        如果(小时<10和分钟<10){
        最大时间=“0”+小时+”:0”+分钟;
        }否则,如果(小时<10){
        最大时间=“0”+小时+”:“+分钟;
        }否则,如果(分钟<10){
        最大时间=小时+“:0”+分钟;
        }否则{
        最长时间=小时+“:”+分钟;
        }               
        }
        }
        返回时间最长;
        }
        公共静态空置换(字符串str,列表列表){
        排列(“”,str,list);
        }
        私有静态无效置换(字符串前缀、字符串str、列表){
        int n=str.length();
        如果(n==0)list.add(前缀);
        否则{
        对于(int i=0;i
        我是否需要使用一些系统API来检查它是否是有效的时间戳?@RajOlive很简单,您不需要使用APIs 24:00最大值或等于00:00(最小值)?假设最大值为23:59