剑指offer——数组中的逆序对

本题在牛客上用python编程是无法顺利通过,参考多种方法仍然无效。下面一种方法,感觉还是很优秀的,不过通过率50%

class Solution():
	def InversePairs(self,data):
		count=0
		datasorted=[]
		for i in data:
			datasorted.append(i)
		datasorted.sort()
		for i in range(len(datasorted)):
			count+=data.index(datasoted[i])
			data.remove(datasorted[i])
		return count%1000000007

解释:

例如:输入数组:data=[3,2,1,5,4,6,0,7]

排序好数组:dataSorted=[0,1,2,3,4,5,6,7]

顺序遍历dataSorted数组,第一个元素0是最小的元素,因此在data数组中,0前面有多少个数,就有多少个逆序对。在0检测完之后,将0从data数组中删除,data=[3,2,1,5,4,6,7],dataSorted数组遍历到1,而1其实就是[1,2,3,4,5,6,7]中的最小元素

因此,原问题就变为子问题:

输入数组:data=[3,2,1,5,4,6,7]

排序好数组:dataSorted=[1,2,3,4,5,6,7]

……

直到遍历到最后一个元素。

你可能感兴趣的:(Python)