MySQL, Oracle, Linux, 软件架构及大数据技术知识分享平台

网站首页 > 精选文章 / 正文

Python最少交换次数(python中交换两个数的位置)

2025-03-30 16:58 huorong 精选文章 1 ℃ 0 评论
def min_swaps_to_group_less_than_k(Q, K):
    # 将输入的数字字符串按空格分割并转换为整数列表
    nums = list(map(int, Q.split()))
    # 找到所有小于K的数字
    target_nums = [num for num in nums if num < K]
    total_target = len(target_nums)
    
    if total_target == 0:
        return 0  # 如果没有小于K的数字,不需要交换
    
    # 滑动窗口,窗口大小为total_target
    max_target_in_window = 0
    current_target_in_window = 0
    
    # 初始化窗口
    for i in range(total_target):
        if nums[i] < K:
            current_target_in_window += 1
    max_target_in_window = current_target_in_window
    
    # 滑动窗口
    for i in range(total_target, len(nums)):
        if nums[i - total_target] < K:
            current_target_in_window -= 1
        if nums[i] < K:
            current_target_in_window += 1
        max_target_in_window = max(max_target_in_window, current_target_in_window)
    
    # 最小交换次数为总目标数减去窗口内最大目标数
    return total_target - max_target_in_window

# 自定义输入
Q = input("请输入数组Q(数字间用空格分开):")
K = int(input("请输入K数值:"))

# 计算并输出最少交换次数
result = min_swaps_to_group_less_than_k(Q, K)
print("最少交换次数:", result)
  1. 识别目标数字:首先,我们需要识别数组中所有小于K的数字。这些数字是我们需要组合在一起的目标。
  2. 滑动窗口:我们可以使用滑动窗口的方法来找到一个窗口,其中包含所有目标数字,并且窗口的大小等于目标数字的总数。我们的目标是找到这样一个窗口,使得窗口外的目标数字最少,这样我们就可以通过最少的交换次数将它们移动到窗口内。
  3. 计算交换次数:对于每个可能的窗口,我们计算需要将多少个目标数字移动到窗口内。这个数量就是我们需要的最小交换次数。


Tags:less 计算

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言