第2章 面試需要的基礎知識
第3章 高質量的代碼
第4章 解決面試題的思路
第5章 優化時間和空間效率
面試題39 : 數組中出現次數超過一半的數字
面試題40 : 最小的k個數
面試題42 : 連續子數組的最大和
面試題43 : 從1到n整數中1出現的次數
面試題45 : 把數組排成最小的數
面試題49 : 醜數
面試題50 : 第一個只出現一次的字符
面試題51 : 數組中的逆序對
第6章 面試中的各項能力
第7章 兩個面試案例
題目描述
在數組中的兩個數字,如果前面一個數字大於後面的數字,則這兩個數字組成一個逆序對。輸入一個數組,求出這個數組中的逆序對的總數P。並將P對1000000007取模的結果輸出。 即輸出P%1000000007
解題思路
歸併排序法,但無法AC。
實戰
class Solution:
def InversePairs(self, data):
# write code here
if not data:
return None
def inversePairsCore(array, counts):
# nonlocal counts
if len(array) == 1:
return array, counts
mid = len(array) // 2
left, counts = inversePairsCore(array[:mid], counts)
right, counts = inversePairsCore(array[mid:], counts)
p1 = 0
p2 = 0
result = []
while p1 < len(left) and p2 < len(right):
if left[p1] > right[p2]:
counts += len(left) - p1
result.append(right[p2])
p2 += 1
else:
result.append(left[p1])
p1 += 1
result += left[p1:] + right[p2:]
return result, counts
_, counts = inversePairsCore(data, 0)
return counts%1000000007