315. Count of Smaller Numbers After Self
多种解法
二分搜索
思路
- list存储有序的数字
从最后开始,将该数组分为两部分
一部分是没有排序的前面
一部分是有序的后面,存储在list中
对于位置i的元素x
利用二分找到x应该插入的list的坐标po,因为list 有序,所以po同时也表示在list中有po个数字小于x
则这个po就是应该整个数组中小于x的右边元素的个数
代码
|
|
Merge Sort
思路
利用merge sort思想,排序保存下标在index中
将数组分为左右两个组,左边组合并时候要加上右边组合并的个数
- 过程分析
int[] nums = {12,34,4,3,7,5,2,6,1};
start = 0, end = 1
nums->12,34,4,3,7,5,2,6,1,
index->0,1,2,3,4,5,6,7,8,result->0,0,0,0,0,0,0,0,0,
start = 0, end = 2
nums->12,34,4,3,7,5,2,6,1,
index->2,0,1,3,4,5,6,7,8,result->1,1,0,0,0,0,0,0,0,
start = 3, end = 4
nums->12,34,4,3,7,5,2,6,1,
index->2,0,1,3,4,5,6,7,8,result->1,1,0,0,0,0,0,0,0,
start = 0, end = 4
nums->12,34,4,3,7,5,2,6,1,
index->3,2,4,0,1,5,6,7,8,result->3,3,1,0,0,0,0,0,0,
start = 5, end = 6
nums->12,34,4,3,7,5,2,6,1,
index->3,2,4,0,1,6,5,7,8,result->3,3,1,0,0,1,0,0,0,
start = 7, end = 8
nums->12,34,4,3,7,5,2,6,1,
index->3,2,4,0,1,6,5,8,7,result->3,3,1,0,0,1,0,1,0,
start = 5, end = 8
nums->12,34,4,3,7,5,2,6,1,
index->3,2,4,0,1,8,6,5,7,result->3,3,1,0,0,2,1,1,0,
start = 0, end = 8
nums->12,34,4,3,7,5,2,6,1,
index->8,6,3,2,5,7,4,0,1,result->7,7,3,2,4,2,1,1,0,
[7, 7, 3, 2, 4, 2, 1, 1, 0]
代码
|
|
reference
11ms-java-solution-using-merge-sort-with-explanation
nlogn-time-space-mergesort-solution-with-detail-explanation