字节ES提前批7.22笔试

1 第一题 给定n,求从1到n二进制1个数多少(暴力超时了)
2 挖矿问题,给个数组有正负,选择一个数,则不能选择相邻的数,求最大收益(用dp过了一半)
3 给个n,拆成3个数乘积最大。

求各位大佬贴下代码思路#字节跳动##笔试题目##提前批#
全部评论
第一题用备忘录计算一下从1到输入最大的数的1之和,这样不会超时,第二题打家劫舍的修改版,只需要注意dp[0] dp[1]状态可能是0,第三题直接对3取模,如果为0,则分成三份相乘,如果为1,则多出来的1随便加在一份上,如果为2,那么多出来的两个1分别加到两份上
1 回复 分享
发布于 2020-07-23 00:02
请问字节es笔试不是25号吗
点赞 回复 分享
发布于 2020-07-23 08:58
   第一题还可以参考lc233 数字1的个数,按位统计1的个数,然后加起来。或许可以进一步减小时间复杂度。 public static int countByBit(int n) { if (n == 1) return 1; int t = n; int cnt = 0; if ((t & 1) == 1) {//number of 1 in the lowest digit     t = t >> 1;     cnt += (t + 1); } else {     t = t >> 1;             cnt +=t; } int mask = 1; while (t > 1) {     int prev = t >> 1;     int after = n & mask;     if ((t & 1) == 1) { cnt += (prev + 1) * (after + 1);     } else { cnt += prev * (after + 1);     }     t = prev;     mask |= (mask << 1); } cnt += (n & mask) + 1;//number of 1 in the highest digit return cnt;     }
点赞 回复 分享
发布于 2020-07-23 03:44
老哥a了多少
点赞 回复 分享
发布于 2020-07-22 23:53
能把第二个题仔细描述一下吗?
点赞 回复 分享
发布于 2020-07-22 23:51
第一题LeetCode中的比特位计数吧?第三题是剑指offer的剪绳子吧?
点赞 回复 分享
发布于 2020-07-22 22:35
第一题 找规律嘛 0   0000 1    0001 2   0010 3   0011 4   0100 5   0101 6   0110 7   0111 8   1000 9   1001 10  1010 11   1011 12  1100 13  1101 14  1110 32位整数: 第一位 0101010101010101 第二位 001100110011001100. 第三位 00001111000011110000 看出规律了嘛~
点赞 回复 分享
发布于 2020-07-22 22:28
挖矿问题:打家劫舍变形题,修改一下状态转移方程
点赞 回复 分享
发布于 2020-07-22 22:22
第三题 拆成两个数的知道嘛,就是把数字分解成2和3 目测拆成三个数的就是把数字分解成2 3 5 连乘
点赞 回复 分享
发布于 2020-07-22 22:22
```java  public int  dig (int [] arr){         int len = arr.length;         if(len ==0 ) return 0;         if(len ==1 ) return arr[0]<0?0:arr[0];         int [] dp0 = new int[len] , dp1= new int[len] ;         dp1[0] = arr[0];         for(int i =1 ; i< len; i++){             dp1[i] = dp0[i-1] + arr[i];             dp0[i] = Math.max(dp0[i-1],dp1[i-1]);         }         return Math.max(dp0[len-1],dp1[len-1]);     } ```
点赞 回复 分享
发布于 2020-07-22 22:02
第三题是拆的三个数和是n么
点赞 回复 分享
发布于 2020-07-22 21:39
第一题这样不知道会不会超时额: int get_bin_num(int n ){     if(n<=1)         return n;     int sum = 0;     vector<int> buffer(n+1, 0);     buffer[1] = 1;     for(int i = 0; i<=n; ++i){         int buffer_value = 0;         if(i % 2 == 0){             buffer_value = buffer[ i / 2 ];         }         else{             buffer_value = buffer[i/2] + 1;         }         buffer[i] = buffer_value;         sum += buffer[i];     }     return sum; }
点赞 回复 分享
发布于 2020-07-22 21:38

相关推荐

拒绝996的悲伤蛙:此贴终结|给路过的牛友分享一下心得👇 实习的时候不要光埋头干活,身边的大佬同事才是真·宝藏人脉!大胆请教他们工作以及职场上的问题以我的经历,我的带教有十几年工作经验,做过运维、后端开发、web测试,现在是高级软测,是行走的避坑指南 我之前纠结要不要学Web测试简历,被他一句话点醒:Web发展成熟,岗位需求在缩,AI对互联网的冲击可能以后架构+开发+测试一人包揽。现在用户更多用的是移动端APP/小程序,相比之下天天守着电脑刷网页的人基数小。 这里我的纠结得到反馈,于是我又把简历发给带教,获得了一对一的简历指导。 感兴趣的可以看看: 1.教育背景:本科→本科(全日制) 2.实习经历:总体问题不大,但第2点要稍作修改,可以写但做功课,如风机、水箱……可能会问用哪个供应商的?使用寿命、型号、电压电流、多少秒会触发逻辑? 3.项目经历(坑太多,大型翻车现场): - 项目名越直白越好,让人一眼就知道你干了啥。 -用的什么语言设计核心接口,异步执行做功课,涉及线程问题,被问可回答n个功能是如何错开异步执行的 - “验证任务消费……阻塞丢包”“高负载稳定性”这种词,没三五年开发功底不要写,不然面试时被问线程、数量级、CPU占用,内存带宽等影响性能的直接原地社死。 -做功课 -做功课,测了哪些模块,如何设计,接口流量抓包,token,变量…… -做功课,要熟悉网络协议…… 带教之前做互联网开发的时候面试过很多人,总的来说不要为了显得项目高大上过渡包装,写了就要做好拷打的准备
听劝,我这个简历该怎么改...
点赞 评论 收藏
分享
评论
1
7
分享

创作者周榜

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