赞
踩
方法1:遍历两次求出最大值最小值 ,时间复杂度N*2
方法2:相邻两个数分为一组比较,大的放在偶数位,小的放到奇数位,然后在偶数位上找到最大值,在奇数位上找到最小值N*1.5
方法3:定义两个变量Max,Min值,相邻两个数分为一组,比较出最大值和最小值,最大值和Max比较,是否大于Max,如果大于赋值于Max,最小值和Min比较,是否小于Min,如果小于赋值于Min
方法4:递归方法,分别求出前后N/2个数的Min和Max
代码:
- (Max,Min)Search(arr, b, e)
-
- {
- If(e-b<=1)
- {
-
- If(arr[b]<arr[e])
-
- {
-
- Return arr[e], arr[b];
-
- }
-
- Else
-
- {
-
- Return arr[b], arr[e];
-
- }
-
- }
-
- MaxL,MinL=Search(arr,b,b+(e-b)/2);
-
- MaxR,MinR=Search(arr,b+(e-b)/2,e);
-
- If(MaxL>MaxR)
-
- maxV=maxL;
-
- else
-
- maxV=maxR;
-
- if(minL<minR)
-
- minV=minL;
-
- else
-
- minV=minR;
-
- return maxV,minV;
-
- }
-

扩展:
求N个数组中,第二大的数:分别求出前后N/2中的最大值,比较返回较小的那个
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。