中选择 n/2 个元素,以先减后增的方式打印所有子序列
原文:
给定一个正整数 n ,任务是通过从 1 到 n 中选择 ceil(n/2) 元素,以先减后增的方式打印的所有子序列。
示例:
输入: n = 5 输出: (2,1,3),(2,1,4),(2,1,5),(3,1,2),(3,1,4),(3,1,5),(3,2,4),(3,2,5),(4,1,2), (4,1,3),(4,1,5),(4,2,3),(4,2,5),(4,2,5),(4,3,5),(5,1,2),(5,1,3),(5,5),(5,3,5) 这些是大小为 3 的有效序列,先减少后增加。
方法:该方法基于使用 python 的内置函数来生成大小 ceil(n/2)的所有子序列。按照以下步骤解决问题:
- 初始化一个 arr[] ,插入从 1 到 n 的所有元素。
- 将变量 k 初始化为上限(n/2) 。
- 使用名为
- 使用变量序列迭代数组 序列,并执行以下步骤:
- 检查 seq[1] > seq[0] 或 seq[-1] < seq[-2] 或 seq 是增加还是减少,然后继续,否则该序列不满足上述条件。
- 如果元素多于 seq[i] < seq[i-1] 和 seq[i] < seq[i 1] 那么也继续,不打印数组。
- 如果序列没有遵循以上任何一点,则打印序列。
下面是上述方法的实现:
python 3
# python3 program for the above approach
# import the ceil permutations in function
from math import ceil
# function to generate all the permutations
from itertools import permutations
# function to check if the sequence is valid
# or not
def validsubsequence(seq):
# if first element is greater or last second
# element is greater than last element
if (seq[0]seq[i 1]:
pass
elif seq[i]seq[j 1]):
return false
i = 1
# if the sequence do not follow above condition
# return true
return true
# driver code
n = 5
k = ceil(n / 2)
arr = list(range(1, n 1))
# generate all permutation of size n / 2 using
# default function
sequences = list(permutations(arr, k))
# print the sequence which is valid valley subsequence
for seq in sequences:
# check whether the seq is valid or not
# function call
if validsubsequence(seq):
print(seq, end =" ")
output:
(2, 1, 3) (2, 1, 4) (2, 1, 5) (3, 1, 2) (3, 1, 4) (3, 1, 5) (3, 2, 4) (3, 2, 5) (4, 1, 2) (4, 1, 3) (4, 1, 5) (4, 2, 3) (4, 2, 5) (4, 3, 5) (5, 1, 2) (5, 1, 3) (5, 1, 4) (5, 2, 3) (5, 2, 4) (5, 3, 4)
时间复杂度:o(cnt5】n/2 ceil(n/2)!n) 辅助空间:o(cnn/2 ceil(n/2)!)*
麻将胡了pg电子网站的版权属于:月萌api www.moonapi.com,转载请注明出处