360前端校招2019笔试编程题
360用的是自己的网站来做笔试而不是牛客网。
一直很不明白为什么笔试都喜欢输入输出而不是子函数的形式哈哈哈,虽然提供了js模拟输入输出的接口,但是由于没办法在自己的编译器上调试,一般出错就很麻烦,只能人眼debug哈哈哈。既然人家这么做了,我们也得适应别人。
对于我而言,很久没写java了,然后只能是用c++或者c来代替js做一些简单的笔试题。
前端对算法其实不是很看重,因为实际业务方面的确是后端偏算法一些嘛,所以题目就是五十道选择题,两道编程题。
大概可以说一下.
第一题
给你一个矩阵,矩阵上元素的数字代表相应位置叠了几个小方块。最后让你求表面积。
解决思路:
投影三个面,正侧上面的面积 * 2即可,每列求出最大值
#include <iostream>
using namespace std;
int main() {int N, M;cin >> N >> M;int arr[N][M];for(int i = 0; i < N; i++) {for(int j = 0; j < M; j++) {cin >> arr[i][j];}}// 正面int sum = 0;int part1 = 0, part2 = 0;for(int j = 0; j < M; j++) {int max = 0;for(int i = 0; i < N; i++) {if(arr[i][j] > max) {max = arr[i][j];} }part1 += max;}// 侧面for(int i = 0; i < N; i++) {int max = 0;for(int j = 0; j < M; j++) {if(arr[i][j] > max) {max = arr[i][j];}}part2 += max;}sum = part1 * 2 + part2 * 2 + M * N * 2;cout << sum << endl;}
第二题
给出两个数,m进制的,各位上的数字可以调换顺序,得出相加后最大的值。如果某位需要进位的,模m,但是不进位。
如:
1 2 3 1
2 3 3 0
四进制的,运算应调整为
1 3 3 2
2 0 3 3
结果是 3321
解题思路:当时做题时间比较紧,也来不及多想,选择最无脑的暴力求解。
for循环每一位数去和对应的数相加,贪心算法,优先满足高位的值最大,每次得出一位,就去除两个加数(c++里我选择直接将值设置为-1)。
#include <iostream>
using namespace std;
int main()
{int n, m; cin >> n >> m;int arr1[n], arr2[n], result[n]; for(int i = 0; i < n; i++) {cin >> arr1[i];}for(int i = 0; i < n; i++) {cin >> arr2[i];}for(int t = 0; t < n; t++) {int max = 0;int cur_i, cur_j;for(int i = 0; i < n; i++) {if(arr1[i] == -100) {continue;} for(int j = 0; j < n; j++) {if(arr2[j] == -100) {continue;}int result = (arr1[i] + arr2[j]) % m;if(result > max) {max = result;cur_i = i;cur_j = j}}}result[t] = max;arr1[cur_i] = -1;arr2[cur_j] = -1;}for(int t = 0; t < n; t++) {cout << result[t] << ' ';}
}
时间复杂度:n2+(n−1)2+(n−2)2+...+12=n(n+1)(2n+1)6≈n3n^2 + (n-1)^2 + (n-2)^2 + ... + 1^2 = \frac{ n(n+1)(2n+1) }{6} \approx n^3n2+(n−1)2+(n−2)2+...+12=6n(n+1)(2n+1)≈n3
说实话,复杂度很差,并不算什么好算法。
主要可优化的部分在于后一次循环重复计算了很多次前一次循环已经算过的值。
所以设想的改进做法是使用缓存或者动态规划。
想到的一种做法是:
假设第一个加数是数组A,第二个加数是数组B。对数组A的每一个元素,都去尝试与数组B中的元素相加,不管会不会重复使用B中的元素。
然后发现如果重复使用了B中的X元素,就看A中哪个元素与B中X元素相加能得到的值最大。锁死X元素,不允许再被选择,其余的用到X的A中的元素必须重新选择B中除X以外的元素。
例如:
3 2 1 0
1 0 0 0
四进制
除了3要0以外,A中的2,1,0都想要B中的1,于是2获得1,A中剩余的1,0必须重新选择。
不过这势必导致一个隐患,如果很多位数的话,重新选择可能又要选到一样的,然后就变成了每次都只能锁死一位,每次就比原来少一位去重选。
感觉时间复杂度似乎没变多少,反倒是 代码要比暴力求解要复杂得多
经过咨询同学,得出的新的解决方法是,统计上下两行各数字有多少个,然后从能得出最大的数开始找。
such as
3 | 2 | 1 | 0 |
---|---|---|---|
1 | 1 | 1 | 1 |
0 | 0 | 1 | 3 |
配出3的有3+0,2+1,1+2,0+3 (m次)
一共要配n位
复杂度为O(n + nm)
比我之前 n3n^3n3 的复杂度好了不少。
360前端校招2019笔试编程题相关推荐
- 2012年奇虎360校园招聘实习生笔试编程题
2012年奇虎360校园招聘实习生笔试编程题 1. 自己实现库函数 int atoi(const char* str); 注意两点:(1). 字符串中,符号位的处理. (2).字符串中,出现非数字 ...
- 京东校招java笔试题_京东2018校招技术笔试编程题汇总
1.回文 分析 暴力枚举一下check回文,可以确定出最后答案的一半,就可以得到答案了. 参考代码 #include using namespace std; bool isPalindrome(st ...
- 奇虎360 2015校园招聘笔试编程题
题目一: 写一个函数,根据两文件的绝对路径算出相对路径. 如a="/qihoo/app/a/b/c/d/new.c",b="/qihoo/app/1/2/test.c&q ...
- 网易笔试编程题java_2017年网易校招笔试JAVA研发编程题
为什么80%的码农都做不了架构师?>>> 尝试挑战了下网易2017校招的笔试编程题,共三题,AC第一题,第二题思考了很久勉强用一种low逼的方式完成,第三题没有完成,希望路过的ACM ...
- 360 c语言 笔试,奇虎360校招的笔试真题
选择题有45个? 好像是,三道简答题, 简答题: 1.设计一个课程表(包括目标人群.核心功能.特色设计); 2.说ATM的缺点,改进方法; 3.如何让李开复等互联网大牌关注你的微薄? 选择题记得不是很 ...
- 2020哔哩哔哩校招后端开发笔试编程题总结
2020哔哩哔哩校招后端开发笔试编程题总结 1.给定一个正整数N,试求有多少组连续正整数满足所有数字之和为N? (1 <= N <= 10 ^ 9) 暴力求解法: package Day4 ...
- 魔法币 java_网易2018校招笔试编程题-魔法币 java实现
魔法币 原题 小易准备去魔法王国采购魔法神器,购买魔法神器需要使用魔法币,但是小易现在一枚魔法币都没有,但是小易有两台魔法机器可以通过投入x(x可以为0)个魔法币产生更多的魔法币. 魔法机器1:如果投 ...
- 58同城2020校招转转算法岗笔试编程题
58同城2020校招转转算法岗笔试编程题 第一题 题目描述:年末了要评选优秀员工了,给定一个优秀员工比率,在员工的评分上计算出能被选中的优秀员工的评分阈值.优秀员工人数=员工人数*优秀员工比率.员工人 ...
- 字节跳动2019春招第二次笔试编程题
字节跳动2019春招第二次笔试编程题 1.变身程序员 题目描述 输入描述 输出描述 示例 示例1 示例2 示例3 分析 参考代码 2.特征提取 题目描述 输入描述 输出描述 示例 示例1 备注 分析 ...
- 快手2019春招笔试编程题
快手2019春招笔试编程题 第一题 输入描述 输出描述 分析 代码 第二题 输入描述 输出描述 分析 代码 第三题 输入描述 输出描述 分析 代码 个人主页:http://redtongue.cn o ...
最新文章
- 嵌入式四大通信接口的解释
- Newtonsoft.Json code
- c语言 printf右对齐,杨辉三角右对齐
- combobox 怎么实现对listview的类别查询_Flutter实战之独立实现官网Demo单词收藏Demo
- 使用setsockopt()接口,设置TCP的接收与发送超时,Invalid argument错误问题
- UNIX域套接字编程和socketpair 函数
- oracle百分比变成小数,oracle中计算百分比,并同时解决小数点前0不显示的问题...
- 计算机英语讲课笔记03
- 网络相关的常用协议总结
- 关于复利2.0 3.0
- 痞子衡嵌入式:ARM Cortex-M文件那些事(1)- 源文件(.c/.h/.s)
- 梅花雨无法在 .net 2.0 下用行的问题
- sybase 性能监控及调优(转)
- python等待10秒_Python交互性编程案例干货分享~| 数字猜谜 | 倒数日App | “拍10秒”测反应速度...
- c#生成随机彩色验证码例子
- 记于开学两个星期...十九岁快乐!
- u深度制作linux启动盘制作工具,U深度制作u盘启动盘制作工具
- IE,谷歌访问跨域问题
- Kibana数据表格
- 理财入门《小狗钱钱》阅读总结
热门文章
- mysql delete in死锁_delete where in导致的死锁问题
- 智能暖风机——4.暖风机外设驱动实现
- V神发布ETH2.0信标链首个硬分叉提案HF1,引入更公平的节点惩罚机制
- 小布语音下载安装_oppo语音助手小布小冰安装包app
- 穿女装上班的大厂程序员:我知道自己是个男生
- CSFB和SRVCC
- maven项目install报错:\target\surefire-reports for the individual test results
- Transphorm的表面贴装封装产品系列增加行业标准TO-263 (D2PAK)封装产品,扩大SuperGaN平台的优势
- 百度开源地图服务器搭建
- 经纬度格式化转换-数据库函数方式