网易前端编程题解答
第一题:彩色砖块
题目我不描述,总之一句话:坑!坑!坑!做过一些哈希的题,也做过颜色分类的题,但是没做过这样的题。一开始我完全没明白题的意思,至多只允许一对颜色不同的砖块,那么我一直想如果是 "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; }