Python中使用k次归并排序调用的数组查找
假设我们有两个数字a和b,我们必须找到一个包含[1, a]范围内值的数组,并且需要正好b次递归归并排序函数调用。
因此,如果输入类似于a = 10,b = 15,则输出将为[3,1,4,6,2,8,5,9,10,7]
为了解决这个问题,我们将遵循以下步骤:
- 定义一个函数solve()。这将接收left,right,array,b
- 如果b < 1或left + 1与right相同,则
- 返回
- b := b - 2
- mid := (left + right) / 2
- temp := array[mid - 1]
- array[mid-1] := array[mid]
- array[mid] := temp
- solve(left, mid, array, b)
- solve(mid, right, array, b)
- 从主方法执行以下操作:
- 如果b mod 2与0相同,则
- 显示“None”
- 返回
- array := 一个大小为n + 1的数组,并填充0
- array[0] := 1
- 对于范围从1到a的i,执行
- array[i] := i + 1
- b := b - 1
- solve(0, a, array, b)
- 返回array,a
示例
让我们看看以下实现以更好地理解:
def solve(left,right,array,b):
if (b < 1 or left + 1 == right):
return
b -= 2
mid = (left + right) // 2
temp = array[mid - 1]
array[mid-1] = array[mid]
array[mid] = temp
solve(left, mid, array, b)
solve(mid, right, array, b)
def find_arr(a,b):
if (b % 2 == 0):
print("None")
return
array = [0 for i in range(a + 2)]
array[0] = 1
for i in range(1, a):
array[i] = i + 1
b -=1
solve(0, a, array, b)
return array, a
a = 10
b = 15
array, size = find_arr(a, b)
print(array[:size])输入
10,15
输出
[3, 1, 4, 6, 2, 8, 5, 9, 10, 7]
广告
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP