源式羽语

有志于学,不赞美,不责难,只求了解认识。

统计数组逆序对

在剑指offer中的36题,分析中给出两种解决方案,1.直接用蛮力解,时间复杂度为O(n^2);2.用归并解,时间复杂度为O(nlog)

这里根据思路给出代码,书中写了用O(n)的空间换时间来完成,但感觉实际上并不需要空间,直接根据归并思想就可以操作。

def countNum(data,start,end):
    if start == end:
        return 0
    len =  (end - start)/2
    left = countNum(data,start,start+len)
    right = countNum(data,start+len+1,end)
    i= start+len
    j = end
    count = 0
    while i >= start and j>=start+len+1:
        if(data[i] > data[j]):
            print(data[i],data[j])
            data[i],data[j] = data[j],data[i]
            i  -= 1
            count += j - start - len
        else:
            j -=1
    return left+right+count
data = [7,5,6,4]
print countNum(data,0,len(data)-1)

阅读更多
个人分类: 算法
上一篇求两个链表的第一个公共结点
下一篇第一次只出现一次的字符
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭