跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • Google 面试题:逆序对
未分類
11 2 月 2021

Google 面试题:逆序对

Google 面试题:逆序对

資深大佬 : zzzrf 6

描述

在数组中的两个数字如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。给你一个数组,求出这个数组中逆序对的总数。 概括:如果 a[i] > a[j] 且 i < j,a[i] 和 a[j] 构成一个逆序对。

在线评测地址

样例 1

输入: A = [2, 4, 1, 3, 5] 输出: 3 解释: (2, 1), (4, 1), (4, 3) 是逆序对 

样例 2

输入: A = [1, 2, 3, 4] 输出: 0 解释: 没有逆序对 

利用归并排序的思想求逆序对,复杂度 O(nlogn) 当然也可以用树状数组或者线段树求解

class Solution:     # @param {int[]} A an array     # @return {int} total of reverse pairs     def reversePairs(self, A):         # Write your code here         self.tmp = [0] * len(A)         return self.mergeSort(A, 0, len(A) - 1)      def mergeSort(self, A, l, r):         if l >= r:             return 0                  m = (l + r) >> 1         ans = self.mergeSort(A, l, m) + self.mergeSort(A, m + 1, r)         i, j, k = l, m + 1, l         while i <= m and j <= r:             if A[i] > A[j]:                 self.tmp[k] = A[j]                 j += 1                 ans += m - i + 1             else:                 self.tmp[k] = A[i]                 i += 1             k += 1              while i <= m:             self.tmp[k] = A[i]             k += 1             i += 1         while j <= r:             self.tmp[k] = A[j]             k += 1             j += 1         for i in xrange(l, r + 1):             A[i] = self.tmp[i]          return ans 

更多题解参考

大佬有話說 (0)

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具