全部评论
第三题 笔试上面我是直接写的通过了。考完我自己再在idea写了一遍,本地写的没有验证正确性,思路就是记忆化计算不会掉落悬崖的次数。DONE
最后一题掉悬崖的,有大佬可以在笔试之后看看代码的吗
我第二题直接算数组当中连续相同的数,居然能过73%的样例。
想蹲一个写出掉悬崖的大佬
第二题超时怎么做啊
第二题和第三题有代码吗
第二题,a了93%,不知道怎么写了,用栈做的
第一题a,第二题超过87%的案例,不知道是不是边界条件没考虑好,第三题一直超时,我的天
float caculate(int Pos, int Step, vector<vector<float>> &P) { float Pleft = 0, Pright = 0 ; /*步数走完肯定不会掉下去*/ if( Pos >= 0 && Pos <= 60 && Step == 0) { P[Pos][Step] = 1; return P[Pos][Step]; } /*越界肯定会掉下去*/ if(Pos < 0 || Pos > 60) { return 0; } /*由于会算很多组,算过了就不用再算了,不等于初始值就代表算过了*/ if(P[Pos][Step] > -0.5 ) { return P[Pos][Step]; } /*在某一位置不会掉落的概率 = 向左走的概率(1/2) * 左边位置不会掉落的概率 + 向右走的概率(1/2) * 右边位置不会掉落的概率 */ Pleft = (1/2) * caculate(Pos - 1, Step - 1, P); Pright = (1/2) * caculate(Pos + 1, Step - 1, P); P[Pos][Step] = Pleft + Pright; return P[Pos][Step]; }
第三题,开一个61的数组记录不掉落悬崖的位置的概率,起点初始化为1。然后二重循环,外层枚举步数,内层枚举数组元素并更新概率数组。由于每走一步要么向左,要么向右,那么更新数组的方式就是将这个位置的概率平分为2,加到左右两边(用新数组接,内层循环完再复制回去)。最后累加概率。
相关推荐
点赞 评论 收藏
分享
11-11 09:31
香港中文大学 前台 点赞 评论 收藏
分享