剑指offer--数组中的逆序对
2015-04-19 01:26
246 查看
题目描述
在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。分类:数组
解法1:使用归并排序来统计。对于左右已经排好序的数组,可以很容易的计算逆序对的数目。
public class Solution { public int InversePairs(int [] array) { if(array.length==0) return 0; if(array.length==1) return 0; int i = solve(array,0,array.length-1); return i; } public int solve(int[] arr,int start,int end){ if(start>=end) return 0; int mid = (start+end)/2; int left = solve(arr,start,mid); int right = solve(arr, mid+1, end); int i=mid;int j=end; int count = left+right; while(i>=start && j>=mid+1){ if(arr[j]<arr[i]){ count += j-mid; i--; }else if(arr[i]==arr[j]){ count += j-mid-1; i--; }else{ j--; } } i = start;j=mid+1; int[] t_arr = new int[end-start+1]; int k=0; while(i<=mid&&j<=end){ if(arr[i]<arr[j]){ t_arr[k] = arr[i]; i++; }else{ t_arr[k] = arr[j]; j++; } k++; } while(i<=mid){ t_arr[k] = arr[i]; i++; k++; } while(j<=end){ t_arr[k] = arr[j]; j++; k++; } for(k=0;k<end-start+1;k++){ arr[start+k] = t_arr[k]; } return count; } }
相关文章推荐
- [剑指offer][面试题36]数组中的逆序对
- 剑指offer-第五章优化时间和空间效率(数组中的逆序对的总数)
- 剑指Offer——数组中的逆序对
- 【剑指Offer学习】【面试题36:数组中的逆序对】
- 剑指offer 36. 数组中的逆序对
- 剑指offer-5-面试36:数组中的逆序对(时间效率和空间效率的平衡)
- 剑指offer之面试题36:数组中的逆序对-归并排序的应用
- 剑指offer_数组中的逆序对
- 剑指offer面试题36-数组中的逆序对
- 【剑指offer】之数组中的逆序对
- 剑指offer-面试题36-数组中的逆序对(O(n)复杂度)
- 【剑指offer】面试题36-数组中的逆序对
- 剑指Offer面试题36(Java版):数组中的逆序对
- 剑指offer 数组中的逆序对
- 剑指offer——35.数组中的逆序对
- 剑指offer 面试题36 数组逆序对个数
- 剑指offer:数组中的逆序对
- 剑指offer 36题 【时间空间效率的平衡】数组中的逆序对
- 剑指Offer 36 数组中的逆序对(归并)
- 剑指offer 36 数组中的逆序对