一道3K笔试题

anliu1234 2012-05-30 08:15:59
只记得大致的内容:


比如输入一个时间“12:18” 在给定的时间里面找出离它最接近的时间,并输出


比如 给定的时间{“01:16”,“06:22”,“14:54”,“13:35”,“12:19”,“12:20” }



C或者java都行 看各位有什么简易解决方法没
...全文
251 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
fjweigege 2012-06-01
  • 打赏
  • 举报
回复
我觉得应该尽量避免运用乘法和除法;下比较小时,做一个筛选,然后比较分,这样就只用到减法,不过比较次数多些。。。
ww884203 2012-06-01
  • 打赏
  • 举报
回复
就1楼的算法就不错,复杂度为O(N),至于说的注意00:01和23:59的情况可以这样来解决

const int total = 24 * 60;
//获取两个时间相减的绝对值,存放到time中
time = min(time , total - time);

楼上的说先比小时感觉不一定对,比如给出的时间是05:01,然后给出的集合是{05:59 ,04:59},按照你的小时划分法不太正确,当然你也可以添加额外的判断条件来纠正这样的错误,但是反而增加了问题的复杂度
selltomorrow 2012-05-31
  • 打赏
  • 举报
回复
1楼的正解
newticigam 2012-05-31
  • 打赏
  • 举报
回复
先直接用strcmp比较排序。
wzw_0827 2012-05-31
  • 打赏
  • 举报
回复
难道你和另外一人是面试的同一家?
wzw_0827 2012-05-31
  • 打赏
  • 举报
回复
都是当天的吗?如果都是当天的话直接当做60进制的 最容易了
JAYXIANJIAN 2012-05-31
  • 打赏
  • 举报
回复
顶一楼!
giant7 2012-05-31
  • 打赏
  • 举报
回复
比较绝对值差的问题
xmu_才盛 2012-05-30
  • 打赏
  • 举报
回复
就是 遍历一遍, 找绝对值, 如果绝对值遇到更大的,就替换掉。
他说的规定时间 就是 让你的时间复杂度尽可能小而已。。 这个明显就是 O(n)的复杂度, 没有更小的了。
wZi 2012-05-30
  • 打赏
  • 举报
回复
MS只有楼上的方法比较好。。。
pathuang68 2012-05-30
  • 打赏
  • 举报
回复
先算出12:18用分钟表示的形式:12:18 = 12 * 60 + 18 = 738

{“01:16”,“06:22”,“14:54”,“13:35”,“12:19”,“12:20” }
先全部转换成分钟形式:
{“76”,“382”,“894”,“815”,“739”,“740” }

然后遍历一遍数组,用数组中的值减738,得到绝对值最小的就是了。当然如果是多天的话,还要注意这样的情况:0:01和23:59。

69,372

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧