网易笔试题牛牛找工作

网易笔试题1:
为了找到自己满意的工作,牛牛收集了每种工作的难度和报酬。牛牛选工作的标准是在难度不超过自身能力值的情况下,牛牛选择报酬最高的工作。在牛牛选定了自己的工作后,牛牛的小伙伴们来找牛牛帮忙选工作,牛牛依然使用自己的标准来帮助小伙伴们。牛牛的小伙伴太多了,于是他只好把这个任务交给了你。

输入描述:

每个输入包含一个测试用例。
每个测试用例的第一行包含两个正整数,分别表示工作的数量N(N<=100000)和小伙伴的数量M(M<=100000)。
接下来的N行每行包含两个正整数,分别表示该项工作的难度Di(Di<=1000000000)和报酬Pi(Pi<=1000000000)。
接下来的一行包含M个正整数,分别表示M个小伙伴的能力值Ai(Ai<=1000000000)。
保证不存在两项工作的报酬相同。

输出描述:

对于每个小伙伴,在单独的一行输出一个正整数表示他能得到的最高报酬。一个工作可以被多个人选择。

输入例子1:

3 3
1 100
10 1000
1000000000 1001
9 10 1000000000

输出例子1:

100
1000
1001

JavaScript(Node 6.11.4)

function work(arr) {
   //m为小伙伴数量
    var m = arr.shift()[1];
   //friend数组存放小伙伴的能力值
    var friend = arr.pop()
    var fri = friend.concat([])
    //对fri数组进行排序
    fri.sort(function(a, b) { return a - b })
    //按工作难度进行排序
    var arr = arr.sort(function(a, b) { return a[0] - b[0] })
    var max = 0;
    var maxj = 0;
    var res = {};
    var final = [];
    for (var i = 0; i < m; i++) {
        for (var j = maxj; j < arr.length; j++) {
        	//若能力值大于工作难度,则对报酬进行比较,因为工作难度和报酬不成正比
            if (fri[i] >= arr[j][0]) {
                max = max > arr[j][1] ? max : arr[j][1]
                // 之后的小伙伴能力值都强于之前,可以不用重复比较工作难度
                maxj = j
                continue
            }
            break
        }
        res[fri[i]] = max
    }
//按小伙伴的输入顺序存放报酬
    friend.forEach(item => {
        final.push(res[item])
    });
    return final
}
var i = 0;
var arr = [];
//导入readline模块
var readline = require('readline');
    const rl = readline.createInterface({
        input: process.stdin,
        output: process.stdout
    });

rl.on('line', function(line) {
    if (line.trim().length === 0) return;
    var tokens = line.trim().split(' ');
    arr[i] = [];
    //将输入的信息全部放入arr数组中,如 
    //[[3,3],[1,100],[10,1000],[1000000000,1001],[9,10,1000000000]]
    tokens.forEach(item => arr[i].push(parseInt(item)));
    if (i == arr[0][0] + 1) {
        rl.close();
    }

    i++
});

rl.on('close', function() {
    work(arr).forEach(item => console.log(item))
    process.exit(0);
});

新手菜鸟,不足之处望大佬指点

网易笔试题2

小Q得到一个神奇的数列: 1, 12, 123,…12345678910,1234567891011…。

并且小Q对于能否被3整除这个性质很感兴趣。

小Q现在希望你能帮他计算一下从数列的第l个到第r个(包含端点)有多少个数可以被3整除。

输入描述:

输入包括两个整数l和r(1 <= l <= r <= 1e9), 表示要求解的区间两端。

输出描述:

输出一个整数, 表示区间内能被3整除的数字个数。

输入例子1:

2 5

输出例子1:

3

例子说明1:

12, 123, 1234, 12345…
其中12, 123, 12345能被3整除。

function divid(n, m) {
    // 通过数列可以找到规律分别是0,1,1,0,1,1,0,1,1…,0代表不能被3整除,1代表能被3整除
    n = n - 1
    var n1 = n % 3 > 1 ? 1 : 0
    var sum1 = parseInt(n / 3) * 2 + n1
    var m1 = m % 3 > 1 ? 1 : 0
    var sum2 = parseInt(m / 3) * 2 + m1
    return sum2 - sum1
}

var arr = [];

var readline = require('readline');
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});

rl.on('line', function(line) {
    if (line.trim().length === 0) return;
    var tokens = line.trim().split(' ');
    tokens.forEach(item => arr.push(parseInt(item)));
    rl.close()

});

rl.on('close', function() {
    console.log(divid(arr[0], arr[1]))
    process.exit(0);
});
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值