【逻辑有点乱,主题可能不是特别明确。仅作为自己刷题的理解日记。(非常菜的】
由于自己对这个方法的理解不到位【第一次接触时认为是合并两个有序数组,但是今天发现不是有序的数组也可以。一直以为这个方法执行一次,就能将长度大于2的数组排序好】实际上是,通过递归调用这个方法,先将两个元素排序,两组两个的数组合并就能做到合并后的有序。若是合并的两个数组不是有序的,那么合并后得到的数组并不是有序的。
leetcode315题的整体代码:
这一题的解决是在归并排序的代码框架上实现的。
注:在官方给的题解中加入了自己测试的代码
package com.tree_;
import org.junit.Test;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* 给你一个整数数组 nums ,按要求返回一个新数组 counts 。数组 counts 有该性质: counts[i] 的值是 nums[i] 右侧小于 nums[i] 的元素的数量。
*
* 来源:力扣(LeetCode)
* 链接:https://leetcode-cn.com/problems/count-of-smaller-numbers-after-self
* 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
*/
public class CountOfSmallerNumbersAfterSelf315 {
/**
* debug merge方法,看看逻辑是怎么实现的
*/
@Test
public void test(){
int[] nums={
5,2,6,1};
int len=nums.length;
// System.out.println(len);
Solution solution = new Solution();
solution.temp=new int[len];
solution.tempIndex=new int[len];
solution.ans=new int[len];
solution.index=new int[len];
for (int i = 0; i < nums.length; ++i) {
solution.index[i] = i;
}
// 输出数组查看是否初始化成功【依旧报错空指针,但是数组是没有问题的呀】
// System.out.println(Arrays.toString(solution.temp));
// index数组忘了初始化
solution.merge(nums,0,len/2,len