气床电面两题

一面感觉是亚裔二代,比较友善。
题目是给你公式,比如偶数的话除2,奇数的话就变成3*n+1,对于任何一个正数,数学猜想是最终他会变成1。每变一步步数加1,给一个上限,让找出范围内最长步数。

二次电面是一个南亚某国人,题做出来被黑,全程很冷淡。不过无所谓了,弯曲房价太高,本来就是练手。
题目是著名的给一个总金额,怎么选开胃菜,感觉就是硬币组合的变形。

lz能详细说下“每变一步步数加1,给一个上限,让找出范围内最长步数。“的意思么?谢谢!

有个思路是用个heap 放已经算好步数的数字
一个map 放 数字 =》 步数

先放 1 到一个heap

然后每次从heap顶端取出最小值 n, 那么2n , (n-1)/3 的需要的步数为 n需要步数+1。
存 2
n , (n-1)/3 到map, 放 2*n , (n-1)/3 进入 heap (需要check map里是否已经存在)

循环的时候设置一个count,每次 2*n , (n-1)/3 小于上限的时候就 +1,count到达上限的时候结束loop

loop结束后从 map 里面 找到 1-上限的 最大值就可以了。

不过貌似还不是最优计算。 有人有更好的思路么?

第一题是这样的:比如7,变换到1是如下顺序:7->22->11->34->17->52->26->13->40->20->10->5->16->8->4->2->1, 总共需要17步。

楼主能讲一下第一题的思路吗,非常感谢!

楼主好,谢谢分享。
第一题不太理解题意,可不可以详细描述一下啊?是每个数都要收敛到1么?

奇数和偶数各执行不同的unique 操作,那给定一个数,步数岂不是固定的?

是。题目问给定一个上限,求这个上限内最大可能步数。不如给10,求1-10之间那个数需要变换步数最多。

楼主怎么被黑的?

感觉这个题没有很好的方法,除了可以用已知数转化的步数去设定未知数的转化步数,比如知道了2需要1步转化到1,那很容易知道4需要2步,8需要3步. 知道3需要7,那10 (3*3+1) 则为6步等等