# leetcode oj java 315. Count of Smaller Numbers After Self

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:

Given nums = [5, 2, 6, 1]

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.


Return the array [2, 1, 1, 0].

package T01;

import java.util.ArrayList;
import java.util.List;

/**
* @author 作者 : xcy
* @version 创建时间：2017年1月3日 下午10:45:16
*          类说明
*/
public class t315 {

public static void main(String[] args) {
// TODO Auto-generated method stub
int[] nums = { 24, 30, 10, 3, 5, 13, 78, 100, 3, 5 };
List<Integer> re = countSmaller(nums);
for (int i : re) {
System.out.println(i);
}
}

public static List<Integer> countSmaller(int[] nums) {
List<Integer> re = new ArrayList<Integer>();
int len = nums.length;
if (len == 0) {
return re;
}
if (len == 1) {
return re;
}
if (len == 2) {
int id = nums[0] > nums[1] ? 1 : 0;
return re;
}
int[] num = new int[len];
List<Integer> copy = new ArrayList<Integer>();
for (int i = len - 1; i >= 0; i--) {
int left = 0, right = copy.size();
while (left < right) {
int mid = left + (right - left) / 2;
if (copy.get(mid) >= nums[i])
right = mid;
else
left = mid + 1;
}
num[i] = right;
}
for (int i : num) {
}
return re;
}

}


12-25 7408

04-22 2799

05-29 3746

05-05 3581

08-18 173

08-30 438

03-10 83

05-07 2859

03-29 914

08-28 292