科大讯飞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

相关推荐

10-02 19:29
已编辑
浙江科技大学 运营
点赞 评论 收藏
分享
头像
10-13 18:10
已编辑
东南大学 C++
。收拾收拾心情下一家吧————————————————10.12更新上面不知道怎么的,每次在手机上编辑都会只有最后一行才会显示。原本不想写凉经的,太伤感情了,但过了一天想了想,凉经的拿起来好好整理,就像象棋一样,你进步最快的时候不是你赢棋的时候,而是在输棋的时候。那废话不多说,就做个复盘吧。一面:1,经典自我介绍2,项目盘问,没啥好说的,感觉问的不是很多3,八股问的比较奇怪,他会深挖性地问一些,比如,我知道MMU,那你知不知道QMMU(记得是这个,总之就是MMU前面加一个字母)4,知不知道slab内存分配器-&gt;这个我清楚5,知不知道排序算法,排序算法一般怎么用6,写一道力扣的,最长回文子串反问:1,工作内容2,工作强度3,关于友商的问题-&gt;后面这个问题问HR去了,和中兴有关,数通这个行业和友商相关的不要提,这个行业和别的行业不同,别的行业干同一行的都是竞争关系,数通这个行业的不同企业的关系比较微妙。特别细节的问题我确实不知道,但一面没挂我。接下来是我被挂的二面,先说说我挂在哪里,技术性问题我应该没啥问题,主要是一些解决问题思路上的回答,一方面是这方面我准备的不多,另一方面是这个面试写的是“专业面试二面”,但是感觉问的问题都是一些主管面/综合面才会问的问题,就是不问技术问方法论。我以前形成的思维定式就是专业面会就是会,不会就直说不会,但事实上如果问到方法论性质的问题的话得扯一下皮,不能按照上面这个模式。刚到位置上就看到面试官叹了一口气,有一些不详的预感。我是下午1点45左右面的。1,经典自我介绍2,你是怎么完成这个项目的,分成几个步骤。我大致说了一下。你有没有觉得你的步骤里面缺了一些什么,(这里已经在引导我往他想的那个方向走了),比如你一个人的能力永远是不够的,,,我们平时会有一些组内的会议来沟通我们的所思所想。。。。3,你在项目中遇到的最困难的地方在什么方面4,说一下你知道的TCP/IP协议网络模型中的网络层有关的协议......5,接着4问,你觉得现在的socket有什么样的缺点,有什么样的优化方向?6,中间手撕了一道很简单的快慢指针的问题。大概是在链表的倒数第N个位置插入一个节点。————————————————————————————————————10.13晚更新补充一下一面说的一些奇怪的概念:1,提到了RPC2,提到了fu(第四声)拷贝,我当时说我只知道零拷贝,知道mmap,然后他说mmap是其中的一种方式,然后他问我知不知道DPDK,我说不知道,他说这个是一个高性能的拷贝方式3,MMU这个前面加了一个什么字母我这里没记,别问我了4,后面还提到了LTU,VFIO,孩子真的不会。
走呀走:华子二面可能会有场景题的,是有些开放性的问题了
点赞 评论 收藏
分享
评论
4
45
分享

创作者周榜

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