315. Count of Smaller Numbers After Self

Posted johnnyzhao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了315. Count of Smaller Numbers After Self相关的知识,希望对你有一定的参考价值。

题目:

/**
 * 315. Count of Smaller Numbers After Self
 * https://leetcode.com/problems/count-of-smaller-numbers-after-self/description/
 * https://www.cnblogs.com/grandyang/p/5078490.html
 *
You are given an integer array nums and you have to return a new counts array.
The counts array has the property where counts[i] is the number of smaller elements to the right of nums[i].

Example:

Input: [5,2,6,1]
Output: [2,1,1,0]
Explanation:
To the right of 5 there are 2 smaller elements (2 and 1).
To the right of 2 there is only 1 smaller element (1).
To the right of 6 there is 1 smaller element (1).
To the right of 1 there is 0 smaller element.
 * */

首先使用brute force方法,结果accept了:

class Solution {
    fun countSmaller(nums: IntArray): List<Int> {
        val result = ArrayList<Int>()
        val size = nums.size
        for (i in 0 until size) {
            help(size, i, nums, result)
        }
    return result
    }

    private fun help(size: Int, currentIndex: Int, nums: IntArray, result: ArrayList<Int>) {
        var count = 0
        val currentNum = nums[currentIndex]
        var newIndex = currentIndex + 1
        if (newIndex == size) {
            newIndex = size - 1
        }
        for (i in newIndex until size) {
            if (nums[i] < currentNum) {
                count++
            }
        }
        result.add(count)
    }
}

 

我们要用binary search去优化:

 

以上是关于315. Count of Smaller Numbers After Self的主要内容,如果未能解决你的问题,请参考以下文章