已投
点赞 评论

相关推荐

10-15 21:11
厦门大学 Java
百度麻将笔试 10.15 题解后端卷第一题 贪心n选k 如果选择的数的下一个数没被选,积分+1所以最后一个数一定能拿一分,而在 n/2的转折处1 (2) 3 (4) 5 (6)(n = 6, k = 3) 可以拿三分k = 4 时(1) (2) 3 (4) 5 (6) 仍然可以拿三分,也就是选择了这个1 不会得分但也不会丢分然后注意数字范围取long long while(t --){        long long int n;        long long int k; cin>>n>>k;        //n个数里最多可以得n/2 ……        //1 - n里假如 n 是奇数 1,2,3可以选2两个数        //假如是偶数那可以选        long long int res = 0;        if(n % 2 == 1) res = n/2 + 1;        else res = n/2;        //到这里是最多能拿多少分,之后每选一个还得扣        if(k         else{            long long int tmp = n + 1;            cout        }    }第二题 约瑟夫环问题注意到每一次选择一个数,都能确定下来结果的一位数比如 1 2 3 4第一次1到队尾,我们就能确定2是结果里的第一位,并且每一次都能确定下来一位所以本质是约瑟夫环问题代码就不放了,我是用队列模拟的第三题 麻将想了半天dp想不出来,那就搜索一下试试,刚好过了——————//dp想破头想不出来//试一下搜索//广度优先搜索//每一轮找刻子或者顺子//然后四轮后找雀头//找得到就res ++//数据量应该支持//哈希表记录一下stringunordered_set uset;void dfs(vector &v,int round){    if(round == 4){        for(int i = 0;i if(v[i] >= 2){                v[i] -=2;                string tmp;                for(int j = 0;j                     tmp.push_back(v[j] + '0');                    tmp.push_back(j + '0');                }                v[i] += 2;                uset.insert(tmp);            }        }        return;    }    //dfs    //先搜刻子,再搜顺子    for(int i = 0;i if(v[i] >= 3){            v[i] -= 3;            dfs(v, round + 1);            v[i] += 3;        }    }    for(int i = 1;i  if(v[i-1] >= 1 && v[i] >= 1 && v[i + 1] >= 1){            v[i - 1] --;            v[i] --;            v[i + 1] --;            dfs(v,round + 1);            v[i - 1] ++;            v[i] ++;            v[i + 1] ++;        }    }}int main() {    int n; cin>>n;    if(n     else{        vector vo(n);        fill(vo.begin(),vo.end(),4);        dfs(vo, 0);        cout    }    }
投递百度等公司10个岗位
点赞 评论 收藏
分享
10-15 21:34
门头沟学院 Java
15道单选,5道不定项选择,3道算法题,两个小时,时间紧张,主要是算法题有些难度。选择题还是常规,数据结构(排序算法,二分查找,KMP),操作系统(Linux,磁盘调度算法,虚拟内存(最近频繁碰到)),计算机网络(HTTPS),数据库。不定项选择里,全是Java相关。算法题,难度陡然递增,2和3量大题难。第一题签到题,比较简单,确定计算最大积分公式即可。第二题,看着很容易,字符串操作类的题目,直接用暴力解析,循环n次每次将第i个字符移动到末尾,但最后超时了,过了70%多,怕时间不够先跳了,折回来分析看字符串的最大长度为10^6,如果通过StringBuilder直接删除和增加的时间复杂度是O(n),加上一层遍历时间复杂度是O(n^2),优化的点就是采用更高效的搜索树,降低删除和插入的时间复杂度,一般可以降低到O(logn),想到了平衡二叉树,那么问题就转化为了实现一个平衡二叉树,定义好其节点类以及旋转,插入,删除和遍历的操作。第三题,麻将胡牌种数的题目,蛮有意思的。整体思路就是枚举和验证,核心点也是容易超时,因此需要一些技巧来优化,首先就是dp来减少重复计算,然后就是通过剪枝来提前排除不可能的情况,由于刻子和顺子在牌种确定的情况下,可以预计算出来,减少耗时,最后就是通过位运算来判断手牌状态,加速状态转移和判断。总的来说,百度这套题,选择题常规,还算比较简单,算法题属于是,想做出来简单,思路很直接,但需要一些技巧来优化避免超时的问题,区分度确实有,我觉得还算合理,算法题2和3即使不用任何优化技巧,也能拿一半的分。 #百度求职进展汇总#
投递百度等公司10个岗位 百度求职进展汇总
点赞 评论 收藏
分享
牛客网
牛客企业服务