计算右侧小于当前元素的个数——超时

40 阅读1分钟

image.png

超时代码:

在已知下标的情况下,在切片中删除这个元素,竟然需要 O(n) 的时间复杂度,所以直接导致代码超时,,

func countSmaller(nums []int) []int {
    n := len(nums)
    ns := make([]int, n)
    copy(ns, nums)
    sort.Ints(ns)
    ans := make([]int, n)
    for i, v := range nums {
        a := sort.SearchInts(ns, v)
        ans[i] = a
        ns = append(ns[0:a], ns[a+1:n]...)
    }
    return ans
}