剑指Offer-36
来源:互联网 发布:宁静长相 知乎 编辑:程序博客网 时间:2024/05/29 16:55
题目:
在数组中的两个数字如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对,输入一个数组,求出这个数组中的逆序对的总数。
例如:在数组 {7,5,6,4} 中存在5个逆序对 分别是(7,6) (7,5) (7,4) (6,4) (5,4)。
实现
// coding = javapublic class Solution36 { public static int inversePairs(int[] nums){ if(nums==null || nums.length<1){ return 0; } int[] temp = new int[nums.length]; System.arraycopy(nums,0,temp,0,nums.length); int count = inversePairsCount(nums,temp,0,nums.length-1); return count; } public static int inversePairsCount(int[] nums,int[] temp,int start,int end){ if(start==end){ return 0; } int middle=(start+end)/2; int i = middle; int j = end; int third=end; int count = 0; int left = inversePairsCount(temp,nums,start,middle); int right = inversePairsCount(temp,nums,middle+1,end); while (i>=start && j>=middle+1){ if(nums[i]>nums[j]){ temp[third--] = nums[i--]; count+=j-middle; } else{ temp[third--]=nums[j--]; } } while (i>=start){ temp[third--] = nums[i--]; } while (j>=middle+1){ temp[third--] = nums[j--]; } count = count+left+right; return count; } public static void main(String[] args) { int[] data = {1, 2, 3, 4, 7, 6, 5}; System.out.println(inversePairs(data)); // 3 int[] data2 = {6, 5, 4, 3, 2, 1}; System.out.println(inversePairs(data2)); // 15 int[] data3 = {1, 2, 3, 4, 5, 6}; System.out.println(inversePairs(data3)); // 0 int[] data4 = {1}; System.out.println(inversePairs(data4)); // 0 int[] data5 = {1, 2}; System.out.println(inversePairs(data5)); // 0 int[] data6 = {2, 1}; System.out.println(inversePairs(data6)); // 1 int[] data7 = {1, 2, 1, 2, 1}; System.out.println(inversePairs(data7)); // 3 }}
阅读全文
0 0
- 剑指Offer --> Question 36
- 【36-40】剑指offer
- 剑指Offer-36
- 剑指OFFER
- 剑指offer
- 剑指Offer
- 剑指offer
- 剑指Offer
- 剑指offer
- 剑指offer
- 剑指offer
- 剑指Offer
- 剑指offer
- 剑指offer
- 剑指Offer
- 剑指offer
- 剑指offer
- 《剑指offer》
- 疯狂Java系列之Set集合
- ConcurrentHashMap个人理解
- angular-cli命令总结
- SE02 Unit01 文件操作——File 、 文件操作—— RandomAccessFile
- Android Retrofit HTTPS 单向认证 双向认证
- 剑指Offer-36
- 一篇文读懂缓存在大型分布式系统中的最佳应用
- Kotlin学习笔记(三)类和继承
- FCKeditor的使用
- applicationContext.xml
- 微信发送模板消息
- cocos 自动换行
- BigDecimal的加 减 乘 除
- 欢迎使用CSDN-markdown编辑器