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
推荐阅读
-
Python实现查找数组中任意第k大的数字算法示例
-
Python实现在某个数组中查找一个值的算法示例
-
Python查找数组中数值和下标相等的元素示例【二分查找】
-
C++实现LeetCode(34.在有序数组中查找元素的第一个和最后一个位置)
-
python中实现数组和列表读取一列的方法
-
数字之魅:寻找数组中的最大值和最小值
-
程序员代码面试指南 python实现(第一章 栈和队列 :最大值减去最小值小于或等于num的子数组数量)
-
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的两个整数 - python实现
-
Java求一个数组中的最大值和最小值
-
Python实现查找数组中任意第k大的数字算法示例