网易前端编程题解答
第一题:彩色砖块
题目我不描述,总之一句话:坑!坑!坑!做过一些哈希的题,也做过颜色分类的题,但是没做过这样的题。一开始我完全没明白题的意思,至多只允许一对颜色不同的砖块,那么我一直想如果是 "AABBCC" 的话不是至少有两对吗?最后时间我实在不知道怎么破了,于是照着个字面理解的方法提交了上去,结果过了!
既然是要排列所有的砖块,那么考虑这三种情况,只有一种颜色、只有两种颜色、有三种及三种以上颜色:
一种颜色:排列方式为1;
两种颜色:排列方式为2;
三种及以上:这是最坑的!我一直在想其中有什么猫腻,结果题目的意思是如果存在三种则无法排列,直接返回0就OK了!
var str = readline();
var map = new Map();
for (var i = 0; i < str.length; i++) {
map.set(str[i], 1);
}
if(map.size === 1) {
print(1);
}
if(map.size === 2){
print(2);
}
if(map.size >= 3){
print(0);
} 第二题:10串
这道题还好,把字符串遍历一遍就OK了
var str = readline();
var max = 0;
var temp = 1;
var last = str[0];
for(var i = 1; i < str.length; i++){
if(str[i] == last){
max = temp > max ? temp : max;
temp = 1;
}else{
last = str[i];
temp++;
}
}
max = temp > max ? temp : max;
print(max); 第三题:顽强的小易
题目有点复杂,我先简单描述一下:设房屋租金x元/天,水果p元/个,小易已有水果f个,金钱d元,小易每天需要吃一个水果,求小易最多能活多少天。
这道题实际上就是一个数学问题,主要注意一下小易目前已有水果f个,所以我们首先需要算出这f哥水果能够小易撑多少天,考虑三种情况:
case 1: f * x == d; 此时代表小易不用买水果,只交房租刚好把钱花完,则能活 f 天;
case 2: f * x > d; 此时代表小易的水果带多了,及交完房租后还没有吃完,及能活 Math.floor(d/x) 天;
case 3: f * x < d; 此时代表小易的水果吃完了过后,还有剩余的钱,则要用剩余的钱计算出还能够再活多少天,设还能再活 n 天,则有公式 d - (f * x) == n * (x + p),因此小易最多能活 n+f 天;
var str = readline();
var arr = readline().split(" ");
var x = Number(arr[0]);
var f = Number(arr[1]);
var d = Number(arr[2]);
var p = Number(arr[3]);
switch (true) {
case f * x == d:
print(f);
break;
case f * x > d:
print(Math.floor(d/x));
break;
case f * x < d:
var n = (d - (f * x)) / (x + p);
//这里有一个问题,如果是 Math.floor(n + f) 的话,则 case 通过率会是90%;
print(Math.floor(n) + f);
break;
default:
print(0);
break;
}
海康威视公司福利 1117人发布


查看14道真题和解析