#华为机试#
第一题简单题不写了,leetcode中等难度原题
第二题时间排序,时间表示为XX:XX:XX.XXX分别代表小时,分钟,秒,毫秒
输入数据可能是简写模式,如1:1:1.1代表01:01:01.001,输出升序排列,遇到相等时间按输入顺序输出。输入时先输入数据量N,输入N条时间,输出为排序后时间。
用例:
输入格式:3
                 02:02:45.654
                 1:01:11.321
                 2:2:45.654
输出:       1:01:11.321
                 02:02:45.654
                 02:02:45.654
思路是把时间补齐同一格式比较,但是第一次超时只过了20,改到结束也没改好,求大佬解答。
全部评论
没做机考,我尝试来回答一下第二题,其实不用对齐格式,设计排序规则,对于两两比较,用:进行字符串分割,然后对每一组的数字转为整形,前导0可以在计算中去掉,出现不同的时候则给出大小,把该规则用于排序函数的参数输入应该就能得出结果
点赞 回复 分享
发布于 2022-07-17 15:18
我简单试了几个样例 没问题。有问题麻烦大家评论 public class Main{ public static void main(String[] args){ Scanner sc = new Scanner(System.in); int n = sc.nextInt(); String[] datetime = new String[n]; for(int i = 0; i < n; i ++) datetime[i] = sc.next(); Comparator<String> cmp = new Comparator<String>() { public int compare(String a, String b){ String dtA = getDT(a), dtB = getDT(b); return dtA.compareTo(dtB); } }; Arrays.sort(datetime,cmp); for(int i = 0; i < n; i ++) System.out.println(datetime[i]); } public static String getDT(String ts){ String[] datatime = new String[4]; String[] date = ts.split(":"); datatime[0] = date[0]; datatime[1] = date[1]; String[] time = date[2].split("\\."); datatime[2] = time[0]; datatime[3] = time[1]; if(datatime[0].length() < 2) datatime[0] = "0"+datatime[0]; if(datatime[1].length() < 2) datatime[1] = "0"+datatime[1]; if(datatime[2].length() < 2) datatime[2] = "0"+datatime[2]; int k = 3 - datatime[3].length(); while(k>0) { datatime[3] = "0"+datatime[3]; k--; } String rst = ""; for(int i = 0; i < 4; i++){ rst += datatime[i]; } return rst; } }
点赞 回复 分享
发布于 2022-07-14 11:19
请问机试用啥平台?牛客网还是**?acm模式还是核心代码模式?
点赞 回复 分享
发布于 2022-07-13 12:49
【大疆招聘】需要内推码的同学可以私聊我或者看我的帖子每日更新内推码 【投递链接】https://we.dji.com/zh-CN 【7.10日15:55更新内推码】 ERWBJLUG,S8SSN9YC,6QC6THJA,QA3CCZHZ,PZDZ5DJC,JTTMJ7EB,AHBLJD6Z,4PXDXQJD,R4ACLNNS,4YKS276M
点赞 回复 分享
发布于 2022-07-10 20:16
请问第一题原题有题号吗
点赞 回复 分享
发布于 2022-07-09 10:58
二维数组分别把时分秒毫秒存起来,然后一个自定义排序就搞定了,二维数组要用Intage
点赞 回复 分享
发布于 2022-07-08 03:13

相关推荐

评论
1
17
分享

创作者周榜

更多
牛客网
牛客企业服务