算法导论9.1 最大值和最小值
来源:互联网 发布:淘宝推广管理在哪 编辑:程序博客网 时间:2024/05/08 20:52
情景:对于一个数组,同时求出其最大值和最小值。
分析:
- 方法1:
将最大值和最小值设置为第一个元素,依次比较剩下的元素,需要比较 2 (n - 1) 次;
- 方法2
主要思路为成对比较。
取出相邻两个元素,比较大小,然后将较小值和最小值比较,将较大值和最大值比较,如此一对元素需要进行三次比较。
最大值和最小值的初始化和数组长度奇偶相关:如果数组长度为奇数,将最大值和最小值设置为第一个元素,然后从第二个元素起,成对的进行比较;
如果数组长度为偶数,首先对第一对元素进行比较,将最大值初始化为较大值,最小值初始化为较小值,然后从第三个元素起,成对的进行比较。
代码:
import java.util.ArrayList;public class MaxAndMinDemo {public static int bruteForce(ArrayList<Integer> list) {int maxVal = list.get(0);int minVal = list.get(0);int times = 0;for (int i = 1; i < list.size(); i++) {if (list.get(i) >= maxVal) {maxVal = list.get(i);times++;} else {times++;}if (list.get(i) <= minVal) {minVal = list.get(i);times++;} else {times++;}}return times;}public static int mathod(ArrayList<Integer> list) {int maxVal = 0;int minVal = 0;int times = 0;if (list.size() % 2 == 0) {if (list.get(0) > list.get(1) ) {maxVal = list.get(0);minVal = list.get(1);} else {maxVal = list.get(1);minVal = list.get(0);}times++;for (int i = 2; i < list.size() - 1; i = i + 2) {if (list.get(i) > list.get(i + 1)) {maxVal = Math.max(maxVal, list.get(i));times++;minVal = Math.min(minVal, list.get(i + 1));times++;} else {maxVal = Math.max(maxVal, list.get(i + 1));times++;minVal = Math.min(minVal, list.get(i));times++;}times++;}} else {maxVal = list.get(0);minVal = list.get(0);for (int i = 1; i < list.size() - 1; i = i + 2) {if (list.get(i) > list.get(i + 1)) {maxVal = Math.max(maxVal, list.get(i));times++;minVal = Math.min(minVal, list.get(i + 1));times++;} else {maxVal = Math.max(maxVal, list.get(i + 1));times++;minVal = Math.min(minVal, list.get(i));times++;}times++;}}return times;}public static void main(String[] args) {// TODO Auto-generated method stubArrayList<Integer> list = new ArrayList<Integer>();for (int j = 100001; j > 0; j--) {list.add(j);}System.out.println(bruteForce(list));System.out.println(mathod(list));}}
结果:
150000
利用方法二,可以减少四分之一的比较次数,很屌。。。
阅读全文
0 0
- 算法导论CLRS 9.1 最大值和最小值
- 算法导论9.1 最大值和最小值
- 【算法导论】最大值和最小值
- 《算法导论》笔记 第9章 9.1最小值和最大值
- 【算法导论】同时找出最大值和最小值
- 算法导论系列文章之同时查找最大值和最小值
- 【算法导论】同时求数组的最大值和最小值
- 算法导论程序18-最大值和最小值(Python)
- 算法导论 ch9 最大值与最小值
- 最小值和最大值(9.1)
- 《算法导论》CLRS算法C++实现(八)P108 最大值和最小值
- STL算法------最小值和最大值
- 算法导论(第9章-中位数和顺序统计学)最大值和最小值
- 《算法导论》第9章 顺序统计学 (1)最小值和最大值
- 算法导论+编程之美,查找数组中最大值和最小值
- 算法导论中位数和顺序统计量之最大值最小值C#实现
- [算法导论]在一个数组中寻找最大值和最小值所需要进行比较的次数
- CLRS 9.1最小值和最大值
- struts2,servlet的线程安全问题
- 使用selenium调用火狐浏览器爬取网页文本及链接
- 尊重历史,深入批判,大力声援方正科技索赔者的维权行动
- Glide使用
- MyEclipse8.5破解方法
- 算法导论9.1 最大值和最小值
- [PAT乙级]1062. 最简分数(20)
- Unity手游制作记-制作通用文本提示
- [PAT乙级]1014. 福尔摩斯的约会 (20)
- FTPrep, 21 Merge Two Sorted Lists
- docker初探---第二季
- 萌新的linux之旅17
- MySQL5.6.11安装步骤(Windows7 64位)
- [PAT乙级]1030. 完美数列(25)