算法问题:平均入睡时间

2019-01-11 17:33:30 +08:00
 ideacco

最新项目有关看起来简单,却挺考验算法的题:

用户 A 23:59 分入睡, 用户 B 0:01 分入睡, 用户 C 0:02 分入睡, 用户 D 23:58 分入睡,

求 4 个人的平均入睡时间。

结题思路: 通过圆形分布把时间换算成角度,算出平均值,再反推回时间。

然而。。。。。要用代码实现出来貌似没那么容易……

3963 次点击
所在节点    程序员
49 条回复
ideacco
2019-01-11 17:34:30 +08:00
大家有什么新奇思路可以出来聊聊
Raymon111111
2019-01-11 17:35:57 +08:00
啥?

把时间换成 unixtime 直接求平均的问题在于?
TomatoYuyuko
2019-01-11 17:38:18 +08:00
用几何模型(求圆的弧长再求中点)做或者设立数轴取中点(自主选择方便计算的原点)
初中数学题√
yinjunjian0
2019-01-11 17:39:51 +08:00
如果是具体时间 2018-01-01 23:59:00,直接转时间戳求平均
如果是题目上 23:59 也可以拼接模拟日期转时间戳求平均
reself
2019-01-11 17:40:03 +08:00
跨日了,需要定义和处理边界问题。
Ediacaran
2019-01-11 17:40:56 +08:00
转时间戳就行有啥难的?
jinhan13789991
2019-01-11 17:41:05 +08:00
把具体时间转换成时间戳,全部相加然后 /总用户数量。
菜蔬学前,只能想到这里了
ppyybb
2019-01-11 17:41:49 +08:00
我的理解: 最后需要知道平均在 00:01 或者 23:59 入睡这样一个指标

以零点作为分界线,只计算 offset
最后得到一个平均 offset
偏移一下就知道了
ShineSmile
2019-01-11 17:43:51 +08:00
用 30 小时计时法解决跨日问题吧 (笑
bxb100
2019-01-11 17:46:19 +08:00
不能换成时间戳?
baicheng10
2019-01-11 17:51:41 +08:00
计算的问题楼上的都行吧。我倒是觉得得看如何定义业务的吧,比如三班倒,中午 12 点睡着,这个怎么算的……
lhx2008
2019-01-11 17:53:34 +08:00
转成分就可以,基准容量是 24*60*2

如果是 23:XX 入睡,初始值为 23*60+XX
如果是 0:02 入睡,初始值为 24*60+2

终值直接计算,如果小于初值,则加 24*60

结果是终值减初值
lhx2008
2019-01-11 17:55:30 +08:00
当然,业务里面,转时间戳就行了,这个根本用不上
xnode
2019-01-11 17:56:05 +08:00
换成时间戳 先排序 然后 取出这些时间戳的平均值 不就是平均时间?
lhx2008
2019-01-11 17:58:04 +08:00
#12
0:02 入睡不用加 24*60 也可以
xpresslink
2019-01-11 18:05:37 +08:00
告诉楼主一个基本常识不带日期的时间是不具备任何意义的。0:01 并不能知道是今天还是昨天。
有了日期的时间就非常简单了。

先找出最早的一个时间 min_time, 然后求其它每个时间和这个 min_time 的时间差 offset,
求这个差的平均值 offset_avg,然后 min_time+offset_avg

小学二年级数学水平就可以了吧?
sjw199166
2019-01-11 18:08:10 +08:00
想象成一维坐标点呢? 0 点在坐标点中心 单位为分钟 每个人睡眠时间就是睡觉时间点到 0 点的长度 靠左边是负数 右边是正数 最后计算平均值
dlutdanielkong
2019-01-11 18:08:36 +08:00
对于凌晨这种的值,加 24,得出来的平均数如果大于 24,再减去 24,
不知道可以吗
shellj
2019-01-11 18:18:42 +08:00
@xpresslink 确实,今天的 0:01 和今天的 23:59 平均在中午,但昨天的 23:59 和今天的 0:01 平均就不一样了
sjw199166
2019-01-11 18:26:46 +08:00
@shellj 如果换成坐标不就 ok 了么

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/526137

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX