Python中使用最小比较法计算三个数中间值的五种方法

在很多竞赛考试中,我们都会遇到寻找中间数的问题。考虑问题中给出的限制条件也很重要,比如最小比较数。让我们来看看这个问题的不同解决方案。

1. 传统方法
在传统方法中,使用数学计算,将找到中间元素。第一步,计算三个数字的总和,然后使用 max 和 min 函数检索列表中的最大值和最小值。现在,中间元素是通过从总数中减去最小值和最大值来计算的。

该方法在代码的可读性和计算的复杂性方面是有效的。

# Approach 1: Using Mathematical Calculation  
  
def middle_of_three_math(num1, num2, num3):  
    # 计算这三个数字的和  ;
    total = num1 + num2 + num3  
  
    # 找出最小值和最大值  ;
    min_num = min(num1, num2, num3)  
    max_num = max(num1, num2, num3)  
  
    #计算中间值  ;
    middle = total - min_num - max_num  
  
    return middle  
  
# Test cases  
print("Approach 1 Output:")  
print(middle_of_three_math(5, 2, 8))  # Should return 5  
print(middle_of_three_math(1, 10, 3))  # Should return 3  
print(middle_of_three_math(7, 7, 7))  # Should return 7  

时间复杂度: O(1)
空间复杂度: O(1)

2. 条件语句
此方法中使用 if else 语句来比较数字,然后找到中间元素。这种方法效率较低。

# Approach 2: Using Conditional Statements  
  
def middle_of_three (num1, num2, num3):  
    if (num1 <= num2 <= num3) or (num3 <= num2 <= num1):  
        return num2  
    elif (num2 <= num1 <= num3) or (num3 <= num1 <= num2):  
        return num1  
    else:  
        return num3  
  
# Test cases  
print("\nApproach 2 Output:")  
print(middle_of_three(5, 2, 8))  # Should return 5  
print(middle_of_three(1, 10, 3))  # Should return 3  
print(middle_of_three(7, 7, 7))  # Should return 7  

时间复杂度: O(1)
空间复杂度: O(1)

3. 排序
在这种方法中,所有元素按照升序排序,然后找到中间元素。为了找到中间值,这种方法效率不高,因为这种方法的计算复杂度非常低。

# Approach 3: Using Sorting  
  
def middle_of_three_sorting(num1, num2, num3):  
    # Create a list and sort it  
    nums = [num1, num2, num3]  
    nums.sort()  
  
    # Return the middle element  
    return nums[1]  
  
# Test cases  
print("\nApproach 3 Output:")  
print(middle_of_three_sorting(5, 2, 8))  # Should return 5  
print(middle_of_three_sorting(1, 10, 3))  # Should return 3  
print(middle_of_three_sorting(7, 7, 7))  # Should return 7  

4. 按位运算符
使用按位运算符进行比较,然后找到中间元素。这些运算符并不常用于这些任务,但对于最少的比较,按位运算符是更好的选择。这种方法有效但不可读。

# Approach 4: Using Bitwise Operators  
  
def middle_of_three_bitwise(num1, num2, num3):  
    # Calculate the sum without the minimum and maximum values  
    middle = num1 + num2 + num3 - max(num1, num2, num3) - min(num1, num2, num3)  
  
    return middle  
  
# Test cases  
print("\nApproach 4 Output:")  
print(middle_of_three_bitwise(5, 2, 8))  # Should return 5  
print(middle_of_three_bitwise(1, 10, 3))  # Should return 3  
print(middle_of_three_bitwise(7, 7, 7))  # Should return 7  

5.三元运算符
三元运算符 "x if condition else y "用于查找中间元素。这样做是为了获得更好的可读性和更紧凑的解决方案。就代码的可读性和计算的复杂性而言,这种方法是高效的。

# Approach 5: Using Ternary Operator  
def middle_of_three_ternary(num1, num2, num3):  
    # Calculate the middle value using a ternary operator  
    middle = num1 if num1 <= num2 <= num3 or num3 <= num2 <= num1 else num2 if num2 <= num1 <= num3 or num3 <= num1 <= num2 else num3  
  
    return middle  
  
# Test cases  
print("\n Approach 5 Output:")  
print(middle_of_three_ternary(5, 2, 8))  # Should return 5  
print(middle_of_three_ternary(1, 10, 3))  # Should return 3  
print(middle_of_three_ternary(7, 7, 7))  # Should return 7