剑指offer——求逆序对

xiaoxiao2021-02-28  136

import java.util.concurrent.ExecutionException; /** * 0 1 2 3 */ public class Solution { public int InversePairs(int [] array) { if(array == null || array.length == 0) return 0; return InversePairCore(array, 0, array.length - 1); } public int InversePairCore(int array[], int start, int end) { if(end < start){ try { throw new Exception("end < start!"); } catch (Exception e) { e.printStackTrace(); } } if(start == end) return 0; int mid = start + (end - start) / 2; int leftCount = InversePairCore(array, start, mid) % 1000000007; int rightCount = InversePairCore(array, mid + 1, end) % 1000000007; int i = mid; int j = end; int count = 0; while (i >= start && j > mid) { if(array[i] > array[j]) { count += j - mid; count = count % 1000000007; --i; } else { --j; } } int tmp[] = new int[end-start+1]; int k = 0; int m = start; int n = mid+1; while (true) { if(m > mid && n > end) break; if(m > mid) { for(int kk = n; kk <= end; ++kk) tmp[k++] = array[kk]; break; } if(n > end) { for(int kk = m; kk <= mid; ++kk) tmp[k++] = array[kk]; break; } if(array[m] > array[n]) { tmp[k++] = array[n++]; } else { tmp[k++] = array[m++]; } } for(int p = 0; p < k; ++p) { array[start+p] = tmp[p]; } return (leftCount + rightCount + count) % 1000000007; } }
转载请注明原文地址: https://www.6miu.com/read-21151.html

最新回复(0)