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

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 iself.max:
                self.max=arr[i]
            i+=2
        if lens%2==1:
            if self.maxarr[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

你可能感兴趣的:(leetcode,python,算法,数据结构,分治算法)