题解 | 连续签到领金币

连续签到领金币

https://www.nowcoder.com/practice/aef5adcef574468c82659e8911bb297f

with
-- 得到数字:以活动开始时间为基准,将签到日期转换为数字
t_num as (
    select distinct
        uid, date(in_time) dt
        , row_number() over w i
        , timestampdiff(day, "2021-07-07", date(in_time)) x
    from tb_user_log
    where artical_id = 0 and sign_in = 1 and date(in_time) between '2021-07-07' and '2021-10-31'
    window w as (partition by uid, month(dt) order by date(in_time))
)
-- 构造分箱:计算数字与序号之差,连续区间和序号步长都为1,所以同一区间差一致
, t_bin as (
    select uid, date_format(dt, '%Y%m') month, cast(i as signed) - cast(x as signed) bin , count(1) cnt
    from t_num
    group by uid, month, bin
)
-- 统计金币
select uid, month, sum(cnt div 7 * 15 + if(cnt % 7 >= 3, cnt % 7 + 2, cnt % 7)) coin
from t_bin
group by uid, month
order by uid, month

设数字序列为d、其子序列为各连续的数字序列di、行号序列为x. 元素位置为自变量,d 与x 分别为因变量,则di 与 x 变化率一致,是两条平行的线,di - x(序列内各元素相减)所得差值Δ 恒一致. 倘若数字有隔断,则表现为某线段di 较之di-1 有所上移,因此di - x = Δi 恒一致,di-1 - x = Δi-1 也恒一致,但Δi != Δi-1. 例如 [1, 2, 3, 5, 7, 8, 9] - [1, 2, 3, 4, 5, 6, 7] = [0, 0, 0, 1, 2, 2, 2]

所以,这题解法核心就是两步

  1. 得到数字序列:以活动初始日期d0 为基准,将签到日期di 映射为数字(di - d0)
  2. 构造分箱:令行号序列 - 数字序列,所得差值即可作为各连续区间(箱)的标记
全部评论

相关推荐

xdm 早上喝奶茶差点喷出来。事情是这样的,我们班有个哥们儿,简称 L,去年秋招拿了字节sp,专业方向是后端。我们当时都震惊:这哥们儿平时课上从来不发言,期末小组作业基本是划水的那种,刷题平台 commit记录我点进去看过,绿格子稀稀拉拉。但他面试一路绿灯。一面二面三面 hr 面,全过,给的还是sp。当时班级群里恭喜他的、问他经验的、约饭的,热闹了一周。他说自己"运气好,准备充分"。我们都信了,直到三月初他入职。入职第二周开始,班里另一个进字节的同学W(在隔壁组的)开始跟我他的不对劲。一开始是写代码慢,后来写不出来,再后来是组里 mentor 让他fix 一个简单 bug 都搞了一下午没动静。最离谱的是上周。W 说他们大部门搞了个新人分享会,让新人讲一下自己负责模块的设计思路。L 上去讲了 20分钟,全程念稿子,问答环节别人随便问一个"那你这里为什么用 Redis 不用 Memcached",他直接卡 30秒说"这个我回去再确认一下"。会后他 mentor 直接找 leader 谈,leader 找 hr 谈,hr调出了他面试录像,全程对比口型和回答节奏,发现他二三面有大量时长在偷偷看屏幕外(推测开了双机位 AI 答题)。(这段是 W后来转述给我的,他自己也是听他组里同事八卦来的)昨天下班前,W 告诉我L 被辞退了,让他自己走,不走就走仲裁但会发函到学校。L 现在已经回学校了,朋友圈仅三天可见。我说真的,我不是个心眼小的人,但是我看到这个消息的时候真的有种"嗯,挺好"的感觉。去年秋招我投字节后端,简历挂。我准备了八个月,背 八股 + 刷 500 题 +项目改了三版,连面试机会都没拿到。班里这哥们儿凭着一个外挂上岸,最后还是被甩出来了。不是说作弊就一定会被发现,但是当面试拿到的 offer远远超出真实能力的时候,迟早会有这一天。试用期三个月不是给你过家家的,是真的要写代码、要在会议上回答问题、要扛需求的。我现在反而有点同情他。同情他相信"上岸就是终点"。发出来不是为了嘲笑谁,就是想说给那些正在被身边作弊上岸的同学搞得很 emo 的 uu 们听——别急,回旋镖很长,但它一定会回来。你继续刷你的题,写你的项目,背你的八股。该是你的迟早是你的,不是你的早晚还得还回去。xdm 共勉。
牛客12588360...:我不想评论面试方式,作弊是绝对不对的,但是你八股加刷题也不过是个做题小子,他穿帮纯粹是他菜,你也没有高明到哪里去
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务