Python - 大于 K 的第 N 个最小值
给定的问题陈述需要使用 Python 查找大于 K 的第 N 个最小值。因此,我们可以结合使用迭代和排序技术来查找所需元素。
理解问题
当前的问题是借助 Python 查找大于 K 的第 N 个最小值。基本上,我们需要找到大于 K 的数字,但它应该是排序列表中数字 K 的第 N 个数字。例如,我们将借助下图来理解这一现象 -
方法 1:算法
在这种方法中,我们将构建一个方法,其中我们将传递三个参数:数字列表、值 K 以及整数 N。此函数将过滤掉大于 K 的数字,然后按升序对数字进行排序。然后,函数将检查过滤列表中是否有 N 个数字,因此返回第 N 个最小的数字。
步骤 1 - 首先启动数字列表以及 K 和 N 的值。
步骤 2 - 接下来,我们将定义函数来查找应大于 K 的第 N 个最小的数字。将此函数命名为 get_Nth_smallest,并在函数内部传递 num_list、K 和 N 作为输入。
步骤 3 - 现在过滤给定 num_list 中大于 K 的数字。
步骤 4 - 过滤掉数字后,我们将使用 sorted 方法对剩余的数字进行排序。
步骤 5 - 对数字进行排序后,我们将检查剩余数字列表的长度,如果小于 N,则返回 None。否则,返回排序列表中的第 N 个数字。
示例
# 初始化列表和变量 num_list = [2, 6, 4, 7, 8, 10, 15, 9] K = 5 N = 3 # 定义函数以获取大于 K 的第 N 个最小值 def get_Nth_smallest(num_list, K, N): filter_nums = [num for num in num_list if num > K] sorted_num_list = sorted(filter_nums) if len(sorted_num_list) < N: return None return sorted_num_list[N-1] # 调用上述函数 Output = get_Nth_smallest(num_list, K, N) # 打印输出 print(f"{N} 大于 {K} 的最小数字是:{Output}")
输出
3 大于 5 的最小数字是:8
复杂度
使用 Python 查找大于 K 的第 N 个最小数字的时间复杂度为 O(N log N),这里 N 是给定 num_list 中的项目数。在代码中,我们过滤掉了需要 O(N) 时间的数字。然后我们执行需要 O(N log N) 时间的排序操作。然后我们检查排序列表中的第 N 个最小数字,这需要 O(1) 时间。因此总体时间复杂度为 O(N log N)。
方法 2:算法
在此方法中,我们将使用带有 lambda 函数的 filter 方法来获取所需的结果。
步骤 1 - 首先初始化变量 num_list、K 和 N。
步骤 2 - 定义一个函数来查找应该大于 K 的第 N 个最小数字,并将此函数名称指定为 get_Nth_smallest() 并将 num_list、K 和 N 作为输入传递。
步骤 3 - 现在使用 filter 和 lambda 函数过滤给定 num_list 中大于 K 的数字。
步骤 4 - 过滤掉数字后,我们将使用排序后的方法。
步骤 5 − 返回第 (N - 1) 项作为结果。
示例
# 初始化列表和变量 num_list = [2, 6, 4, 7, 8, 10, 15, 9] K = 9 N = 2 # Define the function to get Nth smallest greater than K def get_Nth_smallest(num_list, K, N): result = list(filter(lambda a: a > K, num_list)) result.sort() return result[N-1] # 调用上述函数 Output = get_Nth_smallest(num_list, K, N) print(f"{N} 大于 {K} 的最小数字是:{Output}")
输出
2 大于 9 的最小数字是:15
结论
我们已经使用 Python 成功实现了查找大于 K 的第 N 个最小数字的解决方案。我们使用非常有效的逻辑来获得所需的结果。当我们需要从大量数据中找到密钥或数据,并且我们不知道第 N 个元素时,这个问题会很有帮助。