欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

python实现查找数组中最大值和最小值

程序员文章站 2022-05-12 15:02:35
...

python实现查找数组中最大值和最小值

谷歌笔试题
题目描述:
给定数组 al,泣, a3,···an,要求找出数组中的最大值和最小值。假设数组中的值两两各不相同。

分治法

分治法就是将一个规模为 n的、难以直接解决的大问题,分割为 k个规模较小的子问题, 采取各个击破、分而治之的策略得到各个子问题的解,然后将各个子问题的解进行合并,从 而得到原问题的解的 一种方法。
本题中,当采用分治法求解时,就是将数组两两一对分组,如果数组元素个数为奇数个, 就把最后一个元素单独分为 一组,然后分别对每一组中相邻的两个元数进行比较,把二者中 值小的数放在数组的左边,值大的数放在数组右边,只需要比较 n/2 次就可以将数组分组完 成 。 然后可以得出结论:最小值一定在每一组的左边部分,最大值一定在每一组的右边部分, 接着只需要在每一组的左边部分找最小值,右边部分找最大值,查找分别需要比较 n/2-1 次 和 n/2一l 次;因此,总共比较的次数大约为 n/2 * 3= 3n/2-2 次 。

class MaxMin:
    def __init__(self):
        self.max=0
        self.min=0
    def getMax(self):
        return self.max
    def getMin(self):
        return self.min
    def GetmaxAndmin(self,arr):
        if arr==None:
            print('参数不合法')
            return 
        i=0
        lens=len(arr)
        self.max=arr[0]
        self.min=arr[0]
        while i<(lens-1):
            if arr[i]>arr[i+1]:
                arr[i+1],arr[i]=arr[i],arr[i+1]
            i+=2
        self.min=arr[0]
        i=2
        while i<lens:
            if arr[i]<self.min:
                self.min=arr[i]
            i+=2
        self.max=arr[1]
        i=2
        while i<lens:
            if arr[i]>self.max:
                self.max=arr[i]
            i+=2
        if lens%2==1:
            if self.max<arr[lens-1]:
                self.max=arr[lens-1]
            if self.min>arr[lens-1]:
                self.min=arr[lens-1]
if __name__=='__main__':
    array=[7,3,19,40,4,7,1]
    m=MaxMin()
    m.GetmaxAndmin(array)
    print('max=',m.getMax)
    print('min=',m.getMin)
输出:max=40
min=1