8.20日微软笔试总结(js)

186 阅读1分钟

第一题:在二维矩阵上有很多个点,需要多少平行于y轴的宽度为W的压路机才能将所有的点全覆盖。输入(X,Y,W)(X,Y)为点的坐标,W是压路机的宽度。

var X = [2,4,2,6,7,1 ];

var Y = [0,5,3,2,1,5 ];

var W = 2;

function solution(X,Y,W) {
    X.sort();

    var res = 0;

    var i = 0;

    // var N = X.length();

    while (i < X.length) {

            ++res;

            var temp_start = X[i];

        while (i < X.length && X[i] <= temp_start + W) {
                ++i;
            }

    }
// console.log(res);
return res;
}
solution(X,Y,W)

第二题:给定一个字符串S,由0-9组成,使用S中的数字创建一个具有最大的回文数。至少使用一位数字,可以对数字重新排序。 例如:给定 11999,返回 91919;给定39878返回878。

function solution(s) {

let count = new Array(0,0,0,0,0,0,0,0,0,0); // 数组大小为10,元素初始化为0,对应0-9

let res = ""; // 存储答案

let res1=""

for(let i=0;i<s.length;i++){

    if(s[i]){

        let c=s[i];

        count[c]++;

        }

}

for (let i = 9; i >= 0; --i) {

    if (res === "" && i === 0) {

           count[0] = 1; // 如果遍历到0了,字符串还是空的,那么让0的数量为1,避免出现前导0

        }

    for (let j = Math.floor(count[i] / 2); j > 0; j--) {

        res += i; // 把i转为字符存入答案

        }

}

for (let i = 9; i >= 0; --i) {

    if (count[i] % 2) {

        res += i; // 把i转为字符存入答案

        //console.log("count[i] % 2):",count[i] % 2);

        break;

        }

}

for (let i = 0; i <= 9; ++i) {

     for (let j = Math.floor(count[i] / 2); j > 0; --j) {

            res += i; // 把i转为字符存入答案

        }

    }

console.log(res);

return res;

}

let s = "39788";

solution(s);
```