DJI笔试题前两题不知为啥没通过,大佬们帮忙看看。
有点气人。。前两道那么简单却一直调不出来。。
第一题题目:
题目描述:
Tom最近很闲,所以发明了一个小游戏。给出一个数字m(m 521),有三个数字牌,可以用一张牌替换随意一种数字,一张扑克牌只能用一次,现在要求求出替换后的最大值(可以选择不用数字牌)。
输入
有n组数据,先输入n。随后每组数据输入m(m 521)和三个数字牌
输出
替换后的最大数字
样例输入
2
9001
0
1
2
9301
0
1
2
样例输出
9221
9321
我的代码:提示OLE错误:您的程序还在运行,但是输出内容字符数已经超过正确答案的字符数,明显已经是错误的,不必再运行下去了。
一脸懵逼,找到挺久找不到错误。。
var acc = +read_line()
var i = 0
while (i++ < acc) {
var input = read_line()
var r = [], j = 0;
r.push(read_line())
r.push(read_line())
r.push(read_line())
print(maxNum(input, r))
}
function maxNum(str, replace) {
var arr = replace.slice()
arr.sort(function (a, b) {
return +b - +a
})
var ans = ''
for (var i = str.length - 1; i >= 0; i--) {
var radixNum = Math.floor(+str / Math.pow(10, i) % 10)
// var j = 0
if (radixNum <= +arr[0]) {
ans += arr[0]
arr.shift()
} else
ans += radixNum.toString()
}
return ans
}
第二题题目:
题目描述:
给出n个数字(n ,数字范围为[0, 100000]),要求找出序列中有多少个连续子序列满足以下要求:子序列中任意一个数字出现次数小于k
输入
第一行输入n(n 100000)和k(k 100000)
然后输入n个数字(范围为[0,100000])
输出
满足要求的连续子序列个数
样例输入
4 1
1 2 2 3
样例输出
6
Hint
对于1 2 2 3序列,满足要求的子序列区间为[1,1] [2,2] [3,3] [4, 4] [1, 2] [3, 4]
我的思路是:初始化l=r=0指针,r不断向右移动,将当前的元素记录进hash表中,判断这个值是否小于等于k。是的话ans++,否则将l向后移动一位,r=l,继续计算。答案是能跑出来。
但运行时提示TLE时间超限。。有啥更好的思路?
#前端工程师#