Python笔记 之 数组最值算法

本文介绍了一种在O(n)时间复杂度内同时找到数组中最小值和最大值的方法,并给出了具体的伪代码及Python实现。该算法通过一次遍历减少比较次数,适用于纯数字数组。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前提

数组为纯数字数组

时间复杂度

时间复杂度为:O(n)
同时找出最小值和最大值的比较次数上限为:3⌊n/2⌋

伪算法

MINIMUM(A)
    min=A[1]
    for i = 2 to A.length
        if min > A[i]
            min = A[i]
    return min

MAXIMUM(A)
    max=A[1]
    for i = 2 to A.length
        if max < A[i]
            max = A[i]
    return max

minimunAndMaximum(A)
    if A.length is even number
        if A[1] > A[2]
            min = A[2]
            max = A[1]
        else
            min = A[1]
            max = A[2]
        for i = 2 to mod(A.length,2)
            if A[2i-1] > A[2i]
                if max < A[2i-1]
                    max = A[2i-1]
                if min > A[2i]
                    min = A[2i]
            else
                if max < A[2i]
                     max = A[2i]
                if min > A[2i-1]
                    min = A[2i-1]
    else
        min=A[1]
        max=A[1]
        for for i = 1 to mod(A.length,2)
            if A[2i] > A[2i+1]
                if max < A[2i]
                    max = A[2i]
                if min > A[2i+1]
                    min = A[2i+1]
            else
                if max < A[2i+1]
                     max = A[2i+1]
                if min > A[2i]
                    min = A[2i]
    return min,max

Python算法

def minimum(A):
# 求数组最小值
    min=A[0]
    for i in range(1,len(A)):
        if min > A[i]:
            min = A[i]
    return min

def maximum(A):
# 求数组最大值
    max=A[0]
    for i in range(1,len(A)):
        if max < A[i]:
            max = A[i]
    return max

def minimumAndMaximum(A):
    # 同时求最小值和最大值
    if len(A)%2 == 0:
        if A[0] > A[1]:
            min = A[1]
            max = A[0]
        else:
            min = A[0]
            max = A[1]
        for i in range(1,len(A)//2):
            if A[2*i] > A[2*i+1]:
                if max < A[2*i]:
                    max = A[2*i]
                if min > A[2*i+1]:
                    min = A[2*i+1]
            else:
                if max < A[2*i+1]:
                    max = A[2*i+1]
                if min > A[2*i]:
                    min = A[2*i]
    else:
        min = A[0]
        max = A[0]
        for i in range(1,len(A)//2):
            if A[2*i] > A[2*i-1]:
                if max < A[2*i]:
                    max = A[2*i]
                if min > A[2*i-1]:
                    min = A[2*i - 1]
            else:
                if max < A[2*i-1]:
                    max = A[2*i - 1]
                if min > A[2*i]:
                    min = A[2*i]
    return min,max

运行结果

import numpy
a=list(numpy.random.randint(1,100,20,int))
print('数组:',a)
print('最小值:',minimum(a))
print('最大值:',maximum(a))
print('最值:', minimumAndMaximum(a))

数组: [36, 35, 62, 62, 79, 46, 82, 9, 12, 59, 94, 67, 70, 78, 94, 47, 72, 61, 98, 55]
最小值: 9
最大值: 98
最值: (9, 98)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值