【python】查找数组中元素的最大值和最小值?

题目:给定数组arr,找出数组中的最大值和最小值。其中,数组中的值两两各不相同。

分析:采用分治法。将数组两两一对分组,如果数组元素个数为奇数个,就把最后一个元素单独分为一组,偶数个则不用,然后分别对每一组中相邻的两个元素进行比较,把两者中元素值较小的数放在数组的左边,值大的数放在数组的右边,比较n/2此就能够将数组分组完成。为此,最小值一定在每一组的左边部分,最大值一定在每一组的右边部分,接着只需要在每一组的左边部分查找最小值,右边部分查找最大值,查找分别需要比较n/2-1次和n/2-1次。总共大约为n/2*3。

code:

def getMaxAndMin(arr):

    if arr is None:

        print("参数不合法")

        return

    # 两两分组,把较小的数放在数组的左半部分,把较大的数放在右半部分

    i = 0

    while i < (len(arr) - 1):

        if arr[i] > arr[i + 1]:

            temp = arr[i]

            arr[i] = arr[i + 1]

            arr[i + 1] = temp

        i += 2

    # 在各个分组的左半部分查找最小值

    minNum = arr[0]

    i = 2

    while i < len(arr):

        if arr[i] > minNum:

            minNum = arr[i]

        i += 2

    maxNum = arr[1]

    # 在各个分组的右半部分查找最大值

    i = 3

    while i < len(arr):

        if arr[i] > maxNum:

            maxNum = arr[i]

        i += 2

    # 如果数组中元素个数是奇数哥,最后一个元素被分为一组,需要与其比较再确定最大最小值。

    if len(arr) % 2 == 1:

        if maxNum < arr[len(arr) - 1]:

            maxNum = arr[len(arr) - 1]

        if minNum > arr[len(arr) -1]:

            minNum = arr[len(arr) -1]

    return maxNum, minNum


if __name__ == "__main__":

    arr = [7, 3, 19, 40, 4, 7, 1]

    print(getMaxAndMin(arr))

程序的运行结果为:40, 1


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 第四天 数组【悟空教程】 第04天 Java基础 第1章数组 1.1数组概念 软件的基本功能是处理数据,而在处理数...
    Java帮帮阅读 1,619评论 0 9
  • 第五章******************************************************...
    fastwe阅读 711评论 0 0
  • 牛客网上面有一个关于js的自测,然后我看了一下原作者的github,记录一下解题过程吧。所以,对数组操作,不改变原...
    进击的前端阅读 604评论 0 1
  • Javascript有很多数组的方法,有的人有W3C的API,还可以去MDN上去找,但是我觉得API上说的不全,M...
    顽皮的雪狐七七阅读 4,228评论 0 6
  • 如果烟花易残, 你就在心头上期盼月圆 如果桃李无言 你就在梦深处峰回路转 如果孤独如山 你就在文字里自我排遣 生活...
    关月楼阅读 448评论 10 22