华为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#
查看17道真题和解析