科大讯飞2021/8/15笔试

30道选择题+3道编程题
1、将一个数的二进制倒数第二位0换成1,输出替换后的结果
输入一个数如10,起二进制表达为1010,将倒是第二位0换成1,输出结果1110,即14
例如2,二进制表达10,倒数第二个0换成1后是110,即6
90%
public int changeNumber (int num) {
        //一直循环判断倒数第二个0
        int count = 0,base = 0;
        int tmp = num;
        while (tmp != 0){
            if(count == 2){
                break;
            }
            // 判断当前位置上的值
            if((num & (int) Math.pow(2,base)) == 0){
                count++;
            }
            base++;
            tmp /= 2;
        }
        if(count == 0){
            return num + (int)Math.pow(2,base) + (int)Math.pow(2,base+1);
        }else if(count == 1){
            return num + (int)Math.pow(2,base);
        }else {
            return num + (int) Math.pow(2, base-1);
        }
    }
2、给定一个字符串,长度不超过2*10^5,该字符串由小写字母和?组成,?可以替换成任意字母,求让26个字符完整的最小字符串长度。如不存在,输出-1
输入:abcdefghigklmnopqrstuvwwwxyz   输出:28
输入:abcdefghigklmnopqrstuv????xyz. 输出:26
想到的解题思路是滑动窗口的思想,但是当时没写出来~~ or leetcode的最小覆盖
66.7% 超时
    int result = 0;
    int targetDis = 0;

    public int leafPairs(TreeNode root, int dis) {
        targetDis = dis;
        leafPairsCore(root, 0);
        return result;
    }

    public List<Integer> leafPairsCore(TreeNode root, int height) {
        if (root == null) return new LinkedList<>();

        List<Integer> tmp = new LinkedList<>();
        if (root.left == null && root.right == null) {
            tmp.add(height);
            return tmp;
        }

        List<Integer> left = new LinkedList<>();
        if (root.left != null) {
            left = leafPairsCore(root.left, height + 1);
        }
        List<Integer> right = new LinkedList<>();
        if (root.right != null) {
            right = leafPairsCore(root.right, height + 1);
        }
        if (left.size() == 0) {
            return right;
        }
        if (right.size() == 0) {
            return left;
        }

        for (Integer itemLeft : left) {
            for (Integer itemRight : right) {
                if ((itemLeft + itemRight - 2 * height) == targetDis) {
                    result++;
                }
            }
        }
        for (Integer item : left) {
            tmp.add(item);
        }
        for (Integer item : right) {
            tmp.add(item);
        }
        return tmp;
    }


#科大讯飞笔试##笔经##科大讯飞#
全部评论
public int changeNumber (int num) {         // write code here         int count = 0;         int res = 0;         for(int i = 0; i <= 32; i++) {             int m = 1 << i;             if((m & num) == 0) {                 count++;             }             if(count == 2) {                 res = m ^ num;                 break;             }         }         return res;     }
1 回复 分享
发布于 2021-08-16 13:00
请问是核心代码模式还是acm模式
点赞 回复 分享
发布于 2022-07-21 23:50
请问对编程语言有限制吗?
点赞 回复 分享
发布于 2022-07-21 16:38
请问有收到面试通知吗
点赞 回复 分享
发布于 2021-08-28 00:17
new sister nb!
点赞 回复 分享
发布于 2021-08-15 22:55
校友好,第一题的,如果count == 0,return里的这个(int)Math.pow(2,base)是多余的吧😂😂
点赞 回复 分享
发布于 2021-08-15 22:38
感觉第二题你说的力扣的最小覆盖可以当作模板了。
点赞 回复 分享
发布于 2021-08-15 22:12
public static int changeNumber (int num) {         if(num == 0)return 2;         int temp = num;         int count = 0;         int flag = 1;         int base = 0;         while(temp!=0){             if((temp&flag) == 0){                 count++;             }             if(count==2)break;             temp = temp>>>1;             base++;         }         if(count == 0)return (int) (num+Math.pow(2,base+1));         return (int) (num+Math.pow(2,base));     }
点赞 回复 分享
发布于 2021-08-15 22:04
第二题10%,大家帮忙看下
点赞 回复 分享
发布于 2021-08-15 21:54
第一题一样90%,第二题如下10%,测试用例能过不知道问题在哪里
点赞 回复 分享
发布于 2021-08-15 21:22
别问我为什么知道第二题return 31能过20%的测试用例
点赞 回复 分享
发布于 2021-08-15 21:22
为什么除了3道编程题还有25道选择😂
点赞 回复 分享
发布于 2021-08-15 21:17

相关推荐

活泼的代码渣渣在泡池...:哈哈哈挺好的,我也上岸美团了,不说了,我又接了一单
点赞 评论 收藏
分享
作为带过好几个实习生的老mentor,我见过有同学带着一腔热血来实习,最后却只带走一份单薄的履历。实习,是你从学校到职场最关键的过渡期,它的价值远不止一份实习证明。今天,我不讲大道理,就从我作为Mentor的视角,给你们几条能立刻用上的建议。记住,你的目标不是当个好学生,而是成为一个值得信赖的职场新人。一、&nbsp;心态转变:从被动答题到主动解题这是我最想强调的一点。学生思维是:等待老师布置明确的作业,然后完成它。职场思维是:主动发现模糊的问题,然后解决它。反面事例:接到任务后,埋头就做,遇到困难不吭声,直到截止日期才说“这个我不会”。Mentor期待的是啥呢?首先是确认目标:接到任务后,先用自己的话复述一遍:“我理解这个任务是要达成XX效果,对吗?”&nbsp;确保方向没错。然后是主动思考:不要只带问题来,要带“选择题”。问“这个数据我不会查,我尝试了A和B方法都失败了,您看是方法C更合适,还是我有其他没考虑到的渠道?”&nbsp;这证明了你的思考和努力。最后是闭环思维:任务完成后,主动告知结果:“XX任务已完成,数据/文件已发您邮箱,并同步在团队网盘了。其中有个小发现是……,供您参考。”&nbsp;让一切有始有终。二、&nbsp;沟通方式:实习生的很多错误,都源于“想当然”和“不敢问”。反面教材:在做一个PPT时,因为不确定公司模板,就套用了自己觉得好看的模板,结果不能用。那么怎么确认,怎么提问呢?第一个,不懂就问,但别重复问:第一次问,是学习;同样的问题问第三次,就是不用心。准备一个笔记本,把关键信息、操作流程、注意事项都记下来。第二个,及时汇报,别等追问:特别是遇到卡壳或可能延期时,一定要提前说。Mentor不怕你慢,就怕你失联。没事儿更新一下进度:目前已完成80%,但在XX环节遇到点阻力,正在想办法沟通等回复,预计今天下班前确定结果,到时候给您,这样说能让人极度安心。第三个,珍惜1on1机会:和Mentor的定期沟通,不是你被动接受批评,而是你主动获取信息和反馈的黄金时间。提前准备好:a)&nbsp;本周工作进展;b)&nbsp;遇到的困惑/挑战;c)&nbsp;希望学习的新技能;d)&nbsp;对团队业务的任何好奇。三、&nbsp;工作习惯:&nbsp;专业性体现在细节里职业素养不是空话,它藏在每一个你容易忽略的细节中。1.&nbsp;邮件/沟通软件礼仪:邮件:标题清晰(如【实习生XX-XX项目周报】),正文称呼得体,结尾有落款。别用“在吗?”开头。工作群:别发表情包刷屏,沟通事情简明扼要。收到任务或通知,回复“收到,谢谢”,这是基本的确认和尊重。2.&nbsp;文件管理与命名:我会观察实习生的桌面,看他们的使用习惯,乱糟糟的桌面说明他没条理。文件命名要使用统一的命名规则:日期_项目名_内容_版本_姓名。例如:20231027_秋招海报_初版_张三。这能为整个团队节省大量沟通成本。3.&nbsp;对待杂活的态度:复印、整理数据、会议纪要……这些dirty&nbsp;work是不可避免的。但优秀的人是能从中找到价值的:整理数据时,可以留意数据之间的关联或异常,做会议纪要时,可以梳理出会议的决策和待办事项。四、&nbsp;终极目标:带走三样东西1.&nbsp;一段能讲出STAR法则的实战经历:这直接决定了你未来求职简历的厚度。2.&nbsp;一位可以为你未来背书的Mentor/同事:好好表现,离职时保持联系,他们可能成为你未来求职的推荐人和内推渠道。3.&nbsp;对行业和岗位的真实认知:通过这次实习,你想清楚自己是更热爱这个行业,还是想赶紧跑路?这个答案,价值千金。最后,作为你们的Mentor,我想说:大胆去试,勇敢去问,别怕犯错。实习期是你犯错成本最低的时候。展现出你的靠谱、主动和思考,我们做Mentor的,会非常乐意把更核心的任务交给你,因为带你,也是在为团队培养未来的战友。希望这些建议能帮你少走弯路,打一场漂亮的实习战!
家族企业:实习一年比在大学多年都有用
第一次找实习,我建议__
点赞 评论 收藏
分享
评论
4
45
分享

创作者周榜

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