华为5.11机试 js语言
#华为机试# 5.11笔试
我是js答题。第一道题测试样例过了,但是提交显示运行错误。
我想问一下,选语言的时候,是有两种选择吗,一个JavaScript v8,一个JavaScript node吗。我当时没仔细看,看到一个JavaScript就选了,好像没有看到 其他后缀。
然后还给了提示代码。就是js node输入输出代码啊。
有大佬帮忙看一下第一题吗。是我的思路的问题,还是真是运行错误,选错编译器了?
题目:
给出一个长度n,和一个数组a,返回一个数组arr。arr[i]表示a[i]右边有多少个比a[i]小的数。
输入样例:
4
7 9 6 2
输出:
2 2 1 0
代码:
process.stdin.resume() process.stdin.setEncoding('utf-8') let input = '' process.stdin.on('data', (data) => { input += data }) process.stdin.on('end', () => { let inputArray = input.split('\n') /** * 待实现函数,在此函数中填入答题代码 * doFunc() */ let num = parseInt(inputArray[0]) let arr = inputArray[1].split(' ').map((v) => parseInt(v)) let res = new Array(num) let seq = [] seq.push(arr[num - 1]) res[num - 1] = 0 let binSearch = function(seq, target) { let left = 0 let right = seq.length - 1 while (left <= right) { let mid = Math.floor((left + right) / 2) if (seq[mid] < target) { left = mid + 1 } else { right = mid - 1 } } return left } for (let i = num - 2; i >= 0; i--) { let index = binSearch(seq, arr[i]) res[i] = index seq = seq.slice(0, index).concat([arr[i]], seq.slice(index)) // console.log(index, seq) // seq.push(arr[i]) // for (let j = seq.length - 1; j >= index; j--) { // seq[j] = seq[j - 1] // } // seq[index] = arr[i] } console.log(...res) process.exit() })#华为机试##华为##笔试题目##JavaScript#