mirror of
https://github.com/chefyuan/algorithm-base.git
synced 2025-08-04 23:02:31 +00:00
添加了python版本代码
为数据结构和算法文件夹下的代码增加了python语言版本
This commit is contained in:
@@ -35,6 +35,8 @@
|
||||
|
||||
**题目代码**
|
||||
|
||||
Java Code:
|
||||
|
||||
```java
|
||||
class Solution {
|
||||
//全局变量
|
||||
@@ -80,7 +82,51 @@ class Solution {
|
||||
}
|
||||
```
|
||||
|
||||
Python Code:
|
||||
|
||||
```python
|
||||
from typing import List
|
||||
class Solution:
|
||||
count = 0
|
||||
def reversePairs(self, nums: List[int])->int:
|
||||
self.count = 0
|
||||
self.mergeSort(nums, 0, len(nums) - 1)
|
||||
return self.count
|
||||
|
||||
def mergeSort(self, arr: List[int], left: int, right: int):
|
||||
if left < right:
|
||||
mid = left + ((right - left) >> 1)
|
||||
self.mergeSort(arr, left, mid)
|
||||
self.mergeSort(arr, mid + 1, right)
|
||||
self.merge(arr, left, mid, right)
|
||||
|
||||
# 归并
|
||||
def merge(self, arr: List[int], left: int, mid: int, right: int):
|
||||
# 第一步,定义一个新的临时数组
|
||||
temparr = [0] * (right - left + 1)
|
||||
temp1 = left
|
||||
temp2 = mid + 1
|
||||
index = 0
|
||||
# 对应第二步,比较每个指针指向的值,小的存入大集合
|
||||
while temp1 <= mid and temp2 <= right:
|
||||
if arr[temp1] <= arr[temp2]:
|
||||
temparr[index] = arr[temp1]
|
||||
index += 1
|
||||
temp1 += 1
|
||||
else:
|
||||
self.count += (mid - temp1 + 1)
|
||||
temparr[index] = arr[temp2]
|
||||
index += 1
|
||||
temp2 += 1
|
||||
# 对应第三步,将某一集合的剩余元素存到大集合中
|
||||
if temp1 <= mid:
|
||||
temparr[index: index + mid - temp1 + 1] = arr[temp1: temp1 + mid - temp1 + 1]
|
||||
if temp2 <= right:
|
||||
temparr[index: index + right - temp2 + 1] = arr[temp2: temp2 + right - temp2 + 1]
|
||||
|
||||
# 将大集合的元素复制回原数组
|
||||
arr[left: left + right- left + 1] = temparr[0: right - left + 1]
|
||||
```
|
||||
|
||||
好啦,这个题目我们就解决啦,哦对,大家也可以顺手去解决下这个题目。leetcode 912 排序数组,这个题目大家可以用来练手,因为有些排序算法是面试高频考点,所以大家可以防止遗忘,多用这个题目进行练习,防止手生。下面则是我写文章时代码的提交情况,冒泡排序怎么优化都会超时,其他排序算法倒是都可以通过。
|
||||
|
||||
|
Reference in New Issue
Block a user