网易笔试题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);
});