数组的逆序对
在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007
输入描述:
题目保证输入的数组中没有的相同的数字
数据范围:
对于%50的数据,size<=10^4
对于%75的数据,size<=10^5
对于%100的数据,size<=2*10^5
示例1
输入
1,2,3,4,5,6,7,0
输出
7
# -*- coding:utf-8 -*-
class Solution:
def InversePairs(self, data):
# write code here
# 本来想通过排序后元素下标的变化统计逆序对,但是发现有错,要记得计数万一次就要删掉该元素以免出错,但运行只通过50%
if not data:
return 0
sorted_data = sorted(data)
index = 0
result = 0
for i in range(len(sorted_data)):
index = data.index(sorted_data[i])
result+=index
data.remove(sorted_data[i])
return result%1000000007
# 能通过的代码:
count = 0
class Solution:
def InversePairs(self, data):
global count
def MergeSort(lists):
global count
if len(lists) <= 1:
return lists
num = int( len(lists)/2 )
left = MergeSort(lists[:num])
right = MergeSort(lists[num:])
r, l=0, 0
result=[]
while l<len(left) and r<len(right):
if left[l] < right[r]:
result.append(left[l])
l += 1
else:
result.append(right[r])
r += 1
count += len(left)-l
result += right[r:]
result += left[l:]
return result
MergeSort(data)
return count%1000000007
两个链表的第一个公共节点
输入两个链表,找出它们的第一个公共结点。(注意因为传入数据是链表,所以错误测试数据的提示是用其他方式显示的,保证传入数据是正确的)
# -*- coding:utf-8 -*-
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def FindFirstCommonNode(self, pHead1, pHead2):
# write code here
node1=pHead1
node2=pHead2
while node1 != node2:
# 为了遍历时保证两个链表长度一致,可以将两条链表拼接起来,有公共节点的两个链表结尾一定是一样的,此题默认一定会有公共节点,所以可以这样写:
node1=node1.next if node1 else pHead2
node2=node2.next if node2 else pHead1
return node1
数组逆序对与链表公共节点算法解析

本文深入探讨了数组逆序对的计算方法及链表第一个公共节点的查找技巧,提供了两种高效的算法实现,包括归并排序法统计逆序对数量和双指针法寻找链表交点,旨在帮助读者理解和掌握这些基础数据结构操作。
1093

被折叠的 条评论
为什么被折叠?



