算法----查找列表中元素的最小值和最大值

复制代码
#第一种:分组计算
class MaxMin():
    def __init__(self):
        self.max = None
        self.min = None

    def getMax(self):
        return self.max

    def getMin(self):
        return self.min

    def _update_value(self, value, current_value, is_max):
        """
        辅助方法,用于更新最大或最小值。

        参数:
        value (int/float): 待比较的值。
        current_value (int/float): 当前的最大或最小值。
        is_max (bool): 如果为True,表示更新最大值;如果为False,表示更新最小值。

        返回:
        int/float: 更新后的最大或最小值。
        """
        if is_max:
            return max(value, current_value)
        return min(value, current_value)

    def GetmaxAndMin(self, arr):
        if arr is None:
            print("参数不合法!")
            return

        self.max = arr[0]
        self.min = arr[0]

        # 两两一组进行比较交换
        for i in range(0, len(arr) - 1, 2):
            if arr[i] > arr[i + 1]:
                arr[i], arr[i + 1] = arr[i + 1], arr[i]

        # 更新最小值
        for i in range(0, len(arr), 2):
            self.min = self._update_value(arr[i], self.min, False)

        # 更新最大值
        for i in range(1, len(arr), 2):
            self.max = self._update_value(arr[i], self.max, True)

        # 处理列表长度为奇数的情况
        if len(arr) % 2 == 1:
            self.min = self._update_value(arr[-1], self.min, False)
            self.max = self._update_value(arr[-1], self.max, True)


if __name__ == "__main__":
    array = [7, 3, 19, 40, 4, 7, 1]
    m = MaxMin()
    m.GetmaxAndMin(array)
    print("max=" + str(m.getMax()))
    print("min=" + str(m.getMin()))
复制代码
# 第二种:选择最大最小元素
def selectMaxMin(a,low,high):
    if high-low<=1:
        max_=max(a[high],a[low])
        min_=min(a[high],a[low])
        return max_,min_
    max_L,min_L=selectMaxMin(a,low,low+(high-low)//2)
    max_R,min_R=selectMaxMin(a,low+(high-low)//2+1,high)
    return max(max_L,max_R),min(min_L,min_R)
print(selectMaxMin([1,3,-1,4,9,5,2],0,6))
复制代码
返回结果:

第二种:

相关推荐
王志来1379447300812 小时前
聚焦五大核心场景:工控服务器机箱平台的垂直深耕之路
运维·服务器·python
xixiaoyunya12 小时前
从零搭建跨域互联网络:个人与小团队的轻量组网方案技术解析
开发语言·智能路由器·php
一只积极向上的小咸鱼12 小时前
分词器tokenizer
算法·llm
资源大佬星 课it12 小时前
黑马 Java+AI新版V16零基础就业班视频课程百度网盘下载
java·开发语言·人工智能
zmzb010312 小时前
Python课后习题训练记录Day193
开发语言·python
卷无止境12 小时前
LiteLLM 全面解析开源AI网关如何统一管理百余种大模型
后端·python
Elsa️74612 小时前
leetcode 14.最长公共前缀
算法·leetcode·职场和发展
郝学胜-神的一滴12 小时前
[简化版 GAMES 104] 现代游戏引擎 06:从Tick时序到邮局模型,拆解确定性世界的底层密码
开发语言·c++·游戏引擎·图形渲染·软件开发·opengl
二十雨辰12 小时前
[Java]-微服务面试题
java·开发语言·微服务
不会代码的小猴12 小时前
6. Qt网络编程
开发语言·c++·笔记·qt·算法