# 小米2017

## 1.树的高度

### 方法一：

var line;

var tree = [];

var lines = line.trim().split(' ');

tree[lines[1]]=lines[0] //tree[]=父；

}

var max=1;

for(var i=1;i<n;i++){

var count =1;

var item =tree[i];

while(item){

count++;

if(count>max) max=count;

item = tree[item];

}

}

print(max)

### 方法二：

// Union Tree

var tree = [undefined] ; // 0为根节点

for(var i=0; i< n-1; i++){

tree[line[1]] = line[0] ; // 每个位置保存当期索引值对应的父节点

}

var max  = 1;

for(var i = 1; i< n; i++){

var count = 1;

var item = tree[i] ;

while(item != null){

item = tree[item];

count ++ ;

}

if(count > max) max = count;

}

print(max)

## 2。电话号码分身

### 方法一：

var l

var n=+l

while(n--){

t+=s

var chars=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]

for(var i=0;i<t.length;i++){

chars[t.charCodeAt(i)-65]++

}

var all=calc(chars,t.length,[0,0,0,0,0,0,0,0,0,0]),rs=""

for(var i=0;i<10;i++){

rs+=Array(all[i]+1).join(i)

}

print(rs)

}

}

function calc(c,s,r){

//zero

if(c[25]) {

r[2]+=c[25] //10-8=2

remove(c,"ZERO","Z")

}

//two

if(c["W".charCodeAt()-65]) {

r[4]+=c["W".charCodeAt()-65] //12-8=4

remove(c,"TWO","W")

}

//four

if(c["U".charCodeAt()-65]) {

r[6]+=c["U".charCodeAt()-65] //14-8=6

remove(c,"FOUR","U")

}

//five

if(c["F".charCodeAt()-65]) {

r[7]+=c["F".charCodeAt()-65] //15-8=7

remove(c,"FIVE","F")

}

//six

if(c["X".charCodeAt()-65]) {

r[8]+=c["X".charCodeAt()-65] //16-8=8

remove(c,"SIX","X")

}

//seven

if(c["S".charCodeAt()-65]) {

r[9]+=c["S".charCodeAt()-65] //17-8=9

remove(c,"SEVEN","S")

}

//one

if(c["O".charCodeAt()-65]) {

r[3]+=c["O".charCodeAt()-65] //11-8=3

remove(c,"ONE","O")

}

//eight

if(c["G".charCodeAt()-65]) {

r[0]+=c["G".charCodeAt()-65] //8-8=0

remove(c,"EIGHT","G")

}

//nine

if(c["I".charCodeAt()-65]) {

r[1]+=c["I".charCodeAt()-65] //8-8=0

remove(c,"NINE","I")

}

//three

if(c["R".charCodeAt()-65]) {

r[5]+=c["R".charCodeAt()-65] //13-8=0

remove(c,"THREE","R")

}

return r

}

const nn=["ZERO", "ONE", "TWO", "THREE", "FOUR",

"FIVE", "SIX", "SEVEN", "EIGHT", "NINE"]

function remove(a,s,c){

var n=a[c.charCodeAt()-65]

for(var i=0;i<s.length;i++) a[s[i].charCodeAt()-65]-=n

}

## 3。句子反转

### 方法一：

var arr = sc.split(' ');

var arr1 = arr.reverse();

var sc = arr1.join(' ');

print(sc)

### 方法二：

var index = -1;

var arr=[];

for(var i=0;i<line.length;i++){

if(line.charAt(i)==" "){

var str = line.substring(index+1,i);

arr.push(str);

//arr.push(line.substring(index+1,i));

index = i ;

}else if(i==line.length-1){

var str = line.substring(index+1,i+1);

arr.push(str);

}

}

var res = arr.reverse().join(' ');

print(res);

### 方法三：

//print(data);

var arr = data.split(' ');

//print(arr);

arr = arr.reverse();

var result = arr.join(' ');

print(result);

### 方法四：

var arr=line.split(" ");

var result=arr.reverse();

print(result.join(" "));

}

### 方法五：

var str = gets(10000);

str = str.split(' ').reverse().join(' ');

printsth(str);

### 方法六：

var originStr = '',

res = '',

tempArr = [];

tempArr = originStr.split(' ');

res = tempArr.reverse().join(' ');

print(res);

}

### 方法七：

function reverseString(str){

var line = str.split(" ");

var s = "";

for (var key in line) {

s = line[key] + " " + s;

}

return s.substring(0);

}

print(reverseString(str));

### 方法八：

function reverseString(str){

var arr=str.split(' ');

arr.reverse();

var result=arr.join(' ');

return result;

}

print(reverseString(str));

### 方法九：

var arr1=arr.reverse();

var str ="";

for(var i=0;i<arr1.length;i++){

str=str+arr[i]+" ";

}

print(str)

### 方法十：

var line;

words = line.split(" ");

var s = "";

for (var key in words) {

s = words[key] + " " + s;

}

print(s.substr(0, s.length - 1));

}

### 方法十一：

var arr1=arr.reverse();

var str ="";

for(var i=0;i<arr1.length;i++){

str=str+arr[i]+" ";

}

print(str);

### 方法十二：

var line;

line = line.split(' ');

var j = line.length;

for(var i=0;i<j;i++){

print(line[line.length-i-1])

}

}

### 方法十三：

var line;

var arr = line.split(" ").reverse();

print(arr.join(" "));

}

### 方法十四：

var line;

var data=[];

data.push(line.trim());

}

for(var i=0;i<data.length;i++){

print( (data[i].split(' ').reverse().toString()).replace(/\,/g,' '));

}

### 方法十五：

var line;

var lines=[];

lines.push(line);

}

for(var i=0;i<lines.length;i++){

var value='';

var tmp=lines[i].split(' ').reverse();

for(var j=0;j<tmp.length;j++){

value+=' '+tmp[j];

}

print(value)

}

### 方法十六：

var line;

print(reverse(line));

}

function reverse(str) {

var arr1 = str.split(' ');

arr1.map(function(s) {

return s.split('').reverse().join('');

})

return arr1.reverse().join(' ');

}

# 百度2016实习生真题

## 1.乘法表

### 方法1：

var n = parseInt(arr[0]);

var m = parseInt(arr[1]);

var k = parseInt(arr[2]);

var left = 0, right = m * n, mid;

var sum;

while(left <= right){

sum = 0;

mid = Math.floor((left + right) / 2);

for(var i = 1; i <= m; i++){

sum += mid >= n * i ? n : Math.floor(mid / i);

}

if(sum < k){

left = mid + 1;

} else {

right = mid - 1;

}

}

print(left);

### 方法2：

function getLessThan(num){

num=Number(num);

var min=Math.min(n,m);

var max=Math.max(n,m);

var result=0;

for(var i=1;i<=min;i++){

result+=Math.min(Math.floor(num/i),max);

}

return result;

}

var start=1;

var end=n*m;

var currentNum=(start+end)/2;

while(getLessThan(currentNum)<k || getLessThan(currentNum-1)>=k){

if(getLessThan(currentNum)<k){

start=currentNum;

currentNum=(start+end)/2;

}else{

end=currentNum;

currentNum=(start+end)/2;

}

}

print(Math.floor(currentNum))

### 方法3：

function getLessThan(num){

num=Number(num);

var min=Math.min(n,m);

var max=Math.max(n,m);

var result=0;

for(var i=1;i<=min;i++){

result+=Math.min(Math.floor(num/i),max);

}

return result;

}

var start=1;

var end=n*m;

var currentNum=(start+end)/2;

while(getLessThan(currentNum)<k || getLessThan(currentNum-1)>=k){

if(getLessThan(currentNum)<k){

start=currentNum;

currentNum=(start+end)/2;

}else{

end=currentNum;

currentNum=(start+end)/2;

}

}

print(Math.floor(currentNum))

### 方法4：

function outputK(n,m,k){

var left=0;

var right=n*m;

var mid;

var sum;

while(left<=right){

sum=0;

mid=Math.floor((left+right)/2);

//????mid???

for(var i=1;i<=m;i++){

sum += mid>=n*i ? n : Math.floor(mid/i);

}

if(sum<k){

left=mid+1;

}else{

right=mid-1;

}

}

return left;

}

var n=parseInt(lines[0]);

var m=parseInt(lines[1]);

var k=parseInt(lines[2]);

var result=outputK(n,m,k);

print(result);

### 方法5：

function chengfabiao(str){

var arr = str.split(" ");

var n = parseInt(arr[0]);

var m = parseInt(arr[1]);

var k = parseInt(arr[2]);

var left = 1,

right = n*m,

mid,result;

while(left <= right){

mid =  Math.floor((left + right)/2);

var sum = cal(n,m,mid);

if(k > sum){

left = mid + 1;

}else{

right = mid - 1;

}

}

return left;

}

function cal(n,m,mid){

var sum = 0;

for(var i = 1; i <= n; i++){

sum += (mid >= (m*i)) ? m : Math.floor(mid/i);

}

return sum;

}

var line;

print(chengfabiao(line));

}

### 方法6：

var n=parseInt(line[0]),

m=parseInt(line[1]),

k=parseInt(line[2]);

var low=0,high=n*m,mid;

while(high>=low){

var sum=0;

mid=Math.floor((low+high)/2);

for(var i=1;i<=m;i++){

sum+=mid>=i*n?n:Math.floor(mid/i)

}

if(k>sum)low=mid+1;

else high=mid-1;

}

print(low)

## 2.编号转换

### 方法1：

var reg = /^([A-Z]+)(\d+)$/; while(all--){ toggle(read_line()); } function toggle(i){ if(reg.test(i)){ // ????????BC23 var res = i.match(reg); var col = 0; var eng = RegExp.$1; // 'BC'

reg2=/^([A-Z]+)(\d+)$/, row,col,result,position,code; if (input.match(reg1)!=null&&input.match(reg1).length==3){ position=input.match(reg1); row=position[1]; col=position[2]; code=''; while (col>0){ m = col % 26; if (m==0){ m = 26; } code = String.fromCharCode(64 + parseInt(m)) + code; col = ( col - m ) /26; } result=code+row.toString(); print(result); }else if(input.match(reg2)!=null&&(input.match(reg2).length==3)){ position=input.match(reg2); var len=position[1].length; row=position[2]; col=0; for(i=0;i<len;i++){ var tmp=position[1][len-i-1]; col=col+(tmp.charCodeAt(0)-64)*Math.pow(26,i); } result='R'+row.toString()+'C'+col.toString(); print(result); }else{ } } var num; num=read_line(); for (i=1;i<=num;i++){ exchange(read_line()); } ### 方法3： var n=parseInt(read_line()); var chars='ABCDEFGHIJKLMNOPQRSTUVWXYZ'.split(''); for(var d=0;d<n;d++){ var str=read_line(); var arr=[]; var result=''; if(arr=str.match(/^R(\d+)C(\d+)$/)){

var x=+arr[2],ary=[];

while(x>0){

x-=1;

ary.push(x%26);

x=(x-x%26)/26;

}

for(var j=0;j<ary.length;j++){

result=chars[ary[j]]+result;

}

result+=arr[1]

print(result)

}

else{

arr=str.match(/^([A-Z]+)(\d+)$/); result='R'+arr[2]+'C'; var l=arr[1].length,k=0; for(var i=0;i<l;i++){ k=k*26+arr[1].charCodeAt(i)-'A'.charCodeAt(0)+1 } result+=k; print(result); } } ### 方法4： var arr = "0ABCDEFGHIJKLMNOPQRSTUVWXYZ".split(''); function ab2rc(str){ var col = str.match(/[a-z]+/i)[0].toUpperCase().split(''); var rowNum = str.match(/\d+/)[0]; var colNum = 0; for(var i = 0, len = col.length; i < len; i++){ var one = col.pop(); colNum += arr.indexOf(one) * Math.pow(26, i); } print("R" + rowNum + "C" + colNum); } function rc2ab(str){ var rc = str.match(/\d+/g); var row = rc[0], col = parseInt(rc[1]); var idx, cur, temp = 0; var colStr = []; do{ cur = col % 26; col = Math.floor(col / 26); colStr.unshift(cur); }while(col); for(var i = colStr.length - 1; i >= 0; i--){ if(colStr[i] <= 0 && i > 0){ colStr[i - 1]--; colStr[i] += 26; } if(colStr[i]){ colStr[i] = arr[colStr[i]]; } } colStr = colStr.filter(function(item){ return item !== 0; }); colStr = colStr.join(''); print(colStr + row); } var num = read_line(); num = parseInt(num); var reg = /\d+C/i; while(num){ var str = read_line().trim(); if(reg.test(str)){ rc2ab(str); } else { ab2rc(str); } num--; } ## 3.XML文档 ### 方法1： function parseXML(xml) { xml = xml.replace(/<!--[\s\S]+-->/g, ''); var regex = /<\/?(\w+)>/g; var elements = xml.match(regex); if (!elements) { return 'Invalid'; } var nodes = elements.map(element => { var type = element[1] === '/' ? 'end' : 'start'; var name = element.match(/\w+/)[0]; return { type: type, name: name } }); var stack = []; nodes.forEach(node => { var last = stack[stack.length - 1]; if (node.type === 'end' && last.type === 'start' && node.name === last.name) { stack.pop(); } else { stack.push(node); } }); if (stack.length === 0) { return 'Valid'; } else { return 'Invalid'; } } var line, input = ''; while (line = read_line()) { input += line; } print(parseXML(input)); # 百度2017秋招真题 ## 1.找子串 ### 方法1： var str = readLine(); var mark = {}; var prev = str.charAt(0); var o = {}; o[prev] = 1; for(var i = 1; i < str.length; i++){ var char = str.charAt(i); if(char == prev){ if(o[char]){ o[char]++; }else{ o[char] = 1; } }else{ if(!mark[prev] || mark[prev] < o[prev]){ mark[prev] = o[prev]; } prev = char; o = {}; o[char] = 1; } } if(!mark[prev] || mark[prev] < o[prev]){ mark[prev] = o[prev]; } var sum = 0; for(x in mark){ sum += mark[x]; } print(sum); function readLine() { var line = ""; var next = read_line(); while(next.length >= 1024) { line += next; next = read_line(); } line += next; return line; } ### 方法2： var str = readLine(); var start = 0,i = 1,length = str.length; var startValue = str.charAt(0)+"1"; var tempObj = { length: 0 }; if(length){ tempObj[str.charAt(0)+0] = 1; tempObj.length++; } for(;i<length;i++){ var pre = str.charAt(i-1); var cur = str.charAt(i); if(!tempObj[cur+"0"]){ tempObj[cur+"0"] = 1; tempObj.length++; } if(pre === cur){ var oLen = i-start; var value = pre+oLen; if(!tempObj[value]){ tempObj[value] = 1; tempObj.length++; } }else{ start = i; } } print(tempObj.length); function readLine() { var line = ""; var next = read_line(); while(next.length >= 1024) { line += next; next = read_line(); } line += next; return line; } ### 方法3： function readLine() {  var line = "";  var next = read_line();  while(next.length >= 1024) {  line += next;  next = read_line();  }  line += next;  return line; }  var str=readLine()  var con={};  var temp=1;  var arr=str.split("");  for(var i=0;i<arr.length;i++){  if(!con[arr[i]]){  con[arr[i]]=1;  }else if(con[arr[i]]&&arr[i]==arr[i-1]){  temp++;  if(con[arr[i]]<temp){  con[arr[i]]++  }  if(con[arr[i]]!=con[arr[i+1]]){  temp=1;  }  }else{  temp=1  }  }  var num =0;  for(attr in con){  num+=con[attr]  }  print(num) ## 2.十字架 ### 方法1： String.prototype.repeat = function(num){ var s = "";//????????ES6??? while(num--){ s += this; } return s; } var t = +read_line(); var i = 1; while(t--){ print("Case #"+ i +":"); var num = +read_line(); var str = main(num); str.split(",").forEach(function(item){ print(item); }) i++; } function main (num) { if(num == 1){ return "o"; }else{ var str = ""; var k = Math.pow(3, num - 2); var prev = main(num - 1).split(","); for(var i = 0; i < k; i++){ str = str + " ".repeat(k) + prev[i] + " ".repeat(k) + ","; } for(var i = 0; i < Math.ceil(k / 2); i++){ str = str + prev[i].repeat(3) + ","; } var a = str.slice(0, -1).split(","); str = a.concat(a.slice(0, -1).reverse()).join(","); return str; } } ### 方法2： function makeTwoArray(num) { if (num === 1) { return [[true]]; } else { let result = []; for (let i = 0; i < Math.pow(3, num - 1); i++) { result[i] = []; } let lastArray = arguments.callee(num - 1); for (let i = 1; i <= lastArray.length; i++) { for (let j = 1; j <= lastArray[i - 1].length; j++) { let flag = lastArray[i - 1][j - 1]; if (flag) { result[3 * i - 1 - 1][3 * j - 1 - 1] = true; result[3 * i - 1 - 1][3 * j - 1 - 2] = true; result[3 * i - 1 - 1][3 * j - 1] = true; result[3 * i - 1 - 2][3 * j - 1 - 1] = true; result[3 * i - 1][3 * j - 1 - 1] = true; } } } return result; } } function printCross(num) { const crossArray = makeTwoArray(num); for (let i = 0; i < crossArray.length; i++) { let tempOut = ''; for (let j = 0; j < crossArray[i].length; j++) { if (crossArray[i][j]) { tempOut += 'o'; } else { tempOut += ' '; } } print(tempOut); } } function doTest() { let result = []; let times = parseInt(read_line(), 10); for (let i = 0; i < times; i++) { result.push(parseInt(read_line(), 10)); } result.forEach((demon, index) => { print('Case #' + (index + 1) + ':'); printCross(demon); }) } doTest(); ### 方法3： function printLing (n) { if(n == 1){ return "o"; } else{ var s = ""; var a = printLing(n - 1).split(","); var len = Math.pow(3, n - 1) / 3; for (var i = 0; i < len; i++) { s += " ".repeat(len) + a[i] + ","; } for(var i = 0; i < len; i++){ var temp = a[i].length < len ? a[i] + " ".repeat(len - a[i].length) : a[i]; s += temp + temp + a[i] + ","; } for (var i = 0; i < len; i++) { s += " ".repeat(len) + a[i] + ","; } return s.slice(0, s.length - 1); } } String.prototype.repeat = function (num){ var str = ""; for(var i = 0; i < num; i ++){ str += this; } return str; } var n = +read_line(); for(var i = 0; i < n; i++){ var num = +read_line(); print("Case #"+ (i + 1) +":"); var a = printLing(num).split(","); for(var j = 0; j < a.length; j++){ print(a[j]); } } ### 方法4： var t=readInt(); for(var i=0;i<t;i++){ var n=readInt(); print(Case #${i+1 }:)

for(var row of getMatrix(n) ){

print(row);

}

}

function blankMatrix(length){

return (" ".repeat(length)+",").repeat(length).split(",").slice(0,-1);

}

function mConcat(...matrices){

var result=[];

for(var i in matrices[0]){

result.push([]);

for(var m of matrices){

result[i]=result[i]+m[i];

}

}

return result;

}

function getMatrix(n){

if(n==1){

return ["o"];

}else{

var result=[];

var blank=blankMatrix(3**(n-2));

var subMat=getMatrix(n-1);

return [...mConcat(blank,subMat,blank),...mConcat(subMat,subMat,subMat),...mConcat(blank,subMat,blank)]

}

}

## 3.排座位

### 方法1：

for(var i=0;i<t;i++){

var n=parseInt(line[0]);

var m=parseInt(line[1]);

if(m>(n/2))

print(0);

else{

var sum=n;

for(var j=m+1;j<=2*m-1;j++){

sum=sum*(n-j)%1000000007;

}

print(sum);

}

}

## 4.分数序列和

### 方法1：

var line;

var datas = [];

line = line.split('\n');  // ????

datas.push(line);

}

datas.shift();

while (datas.length) {

var n = datas[0];

var f1 = 2;

var n1 = 1;

var tmp = n1;

var res = 0;

var current = 0;

for (var i = 0; i < n; i++) {

current = f1 / n1;

res += current

n1 = f1;

f1 = f1  + tmp;

tmp = n1;

}

print(res.toFixed(4));

//

datas.shift(datas[0]);  // ????????? ???????

}

### 方法2：

while(n--){

if(num == 1){

print("2.0000");

}else{

var a = 2;

var sum = a;

for(var i = 2; i <= num; i++){

a = 1 + 1 / a;

sum += a;

}

print(sum.toFixed(4));

}

}

### 方法3：

var line='';

var count = parseInt(line);

var resArr = [];

{

var res = 0;

var prev = 1;

var prevp = 2;

for(var i=1;i<=cnt;i++)

{

if(i==1){

res+=2;

}else if(i==2){

res+=1.5;

}else{

res+= (prevp+prev+prevp) / (prev+prevp);

var tmp = prev;

prev = prevp;

prevp = tmp+prevp;

}

}

return res.toFixed(4);

}

for(var i=0;i<count;i++)

{

}

for(var i=0;i<resArr.length;i++)

{

print(resArr[i]);

}

### 方法4：

var fib = (function(n){

var cache = {1:1, 2:2};

return function baseFib(n) {

if (!(n in cache)) {

cache[n] = baseFib(n - 1) + baseFib(n - 2);

}

return cache[n];

}

})();

var calc = function(n) {

var sum = 0;

for (var i = 1; i <= n; i++) {

sum += fib(i + 1) / fib(i);

}

return sum;

}

print(calc(line).toFixed(4));

}

### 方法5：

var line='';

var count = parseInt(line);//????

var resArr = [];

{

var res = 0;

var prev = 1;

var prevp = 2;

for(var i=1;i<=cnt;i++)

{

if(i==1){

res+=2;

}else{

var tmp = prev;

prev = prevp;

prevp = tmp+prevp;

res+= (prevp / prev);

}

}

return res.toFixed(4);

}

for(var i=0;i<count;i++)

{

print(resArr[i]);

}

### 方法6：

var line;

var lines= [];

for(var i=0;i < num ; i++){

lines.push(n);

}

//for(var i=1;i < 10 ; i++){

//  print(fb(i))

//}

function fb(n)

var res = [1,2];

if(n == 1 ){

return 1

}

for(var i=2;i<n;i++){

res[i] = res[i-1] + res[i-2];

}

return res[n-1];

var ans = 2;

for( var i = 0 ; i < lines.length ; i++){

var numberN = parseInt(lines[i]);

while( numberN > 1 ){

ans =(  fb(numberN+1)/fb(numberN)   ) +ans;

//print("@@"+"    "+fb(numberN+1) +"    "+fb(numberN)+"@@");

numberN--;

}

print(ans.toFixed(4));

ans =2;

}

//print(lines.length)

• 0
点赞
• 0
评论
• 0
收藏
• 一键三连
• 扫一扫，分享海报

01-14 2万+

03-23 384
07-22 171
02-24 2059
01-20 917
07-28 1046
04-28 203
09-10 384
04-05
01-24 1457
11-13 130
09-06
03-15