解法1、

我们可以吧数字中的最大值和最小值看成两个独立的问题分别求出数组中的最大值和最小值。

直接的方法就是扫描数字,找到最大数以及最小数。

<span style="font-size:18px;">bool MaxMin(std::vector<T> array, T* max, T* min) {if (array.size() < 1) {return false;}*max = array[0];*min = array[0];size_t array_size = array.size();for (int i = 1; i < array_size; ++i) {if (array[i] > *max) {*max = array[i];} else if (array[i] < *min) {*min = array[i];}}return true;
}
</span>

解法2、

数组中的一对一对的数相互比较,比较中较大的一个和max比较,较小的和min比较,总计有N/2对数,分别和max和min进行一次比较,共计3N/2次比较。

template<typename T>
bool MaxMin_1(std::vector<T> array, T* max, T* min) {if (array.size() < 1) {return false;}*max = array[0];*min = array[0];int index = 1;int array_size = array.size();while(index < array_size && index +1 <array_size) {if (array[index] >= array[index + 1]) {if (array[index] > *max) {*max = array[index];}if (array[index + 1] < *min) {*min = array[index + 1];}} else {if (array[index + 1] > *max) {*max = array[index + 1];}if (array[index] < *min) {*min = array[index];}}index += 2;} if (index < array.size()) {if (array[index] > *max) {*max = array[index];}if (array[index] < *min) {*min = array[index];}}return true;
}

3、 分治法

template<typename T>
bool MaxMin_2(std::vector<T> array, int start, int end, T* max, T* min) {if (end - start > 1) {MaxMin_2(array, start, (start + end) / 2, max, min);MaxMin_2(array, (start + end) / 2 + 1, end, max, min);} else {if (array[end] > array[start]) {if (array[end] > *max) {*max = array[end];}if (array[start] < *min) {*min = array[start];}} else {if (array[start] > *max) {*max = array[start];}if (array[end] < *min) {*min = array[end];}}}
}
template<typename T>
bool MaxMin_3(std::vector<T> array, int start, int end, T* max, T* min) {if (end > start) {MaxMin_2(array, start, (start + end) / 2, max, min);MaxMin_2(array, (start + end) / 2 + 1, end, max, min);} else {if (array[start] > *max) {*max = array[start];}if (array[start] < *min) {*min = array[start];}}
}

寻找数组中的最大值和最小值相关推荐

  1. 编程之美2.10 寻找数组中的最大值和最小值

    这个问题其实很容易解决,就是循环遍历一遍数组,然后找到数组中存在的最大值和最小值就可以了,书中主要讨论的问题是比较次数较小的方法,不过,书中已经证明了,无论用什么方法最少的比较次数也就是循环遍历一遍的 ...

  2. 编程之美2.10:寻找数组中的最大值和最小值

    编程之美2.10: 对于一个有N个整数组成的数组,需要比较多少次才能把最大值和最小值找出来呢? 算法的思想是: 分而治之 测试数据:---------------------------------- ...

  3. 编程之美-寻找数组中的最大值和最小值方法整理

    [试题描述] 方法一:比较2N次 方法二:比较1.5N次 方法三:比较1.5N次 方法四:分治法,比较1.5N次

  4. 寻找数组中 的最大值最小值

    最简单的方法就是N中的每个数分别和max,min比较,看似2N次比较,其实大于max的就不必和min比较,小于min的也不必和max比较,因此比较的次数不足2N次,程序如下: [cpp] view p ...

  5. Java 数组中找最大值和最小值

    题目描述 计算并输出一维数组中的最大值和最小值. 输入描述 输入一个具有8个数的一维数组 输出描述 输出该数组中的最大值和最小值 输入样例 19.8 12.3 45 67.6 23 15.98 2.5 ...

  6. Java 数组 定义一个数组,获取数组中的最大值和最小值,奇数个数和偶数个数...

    /*** 定义一个数组,获取数组中的最大值和最小值 奇数个数和偶数个数* */ package com.xuyigang1234.chp01;public class Demo8 {public st ...

  7. Java编程定义一个数组,输出数组中的最大值与最小值

    package com.pzhu.demo;public class MaxMin {//Java编程定义一个数组,输出数组中的最大值和最小值public static void main(Strin ...

  8. Java定义一个数组,输出数组中的最大值和最小值

    题目 定义一个数组,输出数组中的最大值和最小值 public class TestArray1 {public static void main(String[] args) {int[] a = n ...

  9. 给定一个数组,输出这个数组中的最大值和最小值

    /*** @author LLJ* @time 2020-5-6 17点06分* @Description 给定一个数组,输出这个数组中的最大值和最小值*/ public class BigAndSm ...

最新文章

  1. Object.observe将不加入到ES7
  2. 课堂经验值管理小程序_微信小程序怎么管理门店?
  3. Microsoft .NET 框架资源基础 ---摘自:msdn
  4. excel实战应用案例100讲(十四)-Excel可直接分析的大数据语义层
  5. SQL Tuning Advisor简单使用
  6. mysql复杂查询示例_找到时间和内存复杂性之间的平衡-一个示例
  7. Eclipse最全快捷键
  8. 计算机管理 窗口中找到 guest 用户,Guest 来宾用户不见了??
  9. 祝各位MM们节日快乐!
  10. java+整合handwrite_E-signature-master
  11. 牛客网c语言笔试题库,【sql】牛客网练习题 (共 61 题)
  12. 代理记账公司如何寻找客户群体,客户群体有那些
  13. 乐高收割机器人_乐高机器人这个大坑,为啥大家都拽着孩子往里跳?
  14. 浏览器视频文件分段缓存合并成完整的视频
  15. SaaS,PaaS和IaaS在一张图中进行了解释
  16. 【揭秘】1024特企- 前端仔微信里都藏着什么
  17. Springboot毕设项目高校人事管理系统il4i5(java+VUE+Mybatis+Maven+Mysql)
  18. 重磅!机器人杀手真来了?韩国研究AI武器 遭多国抵制
  19. 六大布局之LinearLayout
  20. 如何连接ftp服务器

热门文章

  1. windows/ubuntu 文件共享之 Samba 配置
  2. 开机启动加载驱动过程中调用PostMessage函数出错
  3. ginkgo php,【行业资讯】PHP 开发框架 ginkgo v0.1.2 发布
  4. 【WPF】MVVM模式的3种command
  5. C#获取文件的MD5码
  6. Vue.js 系列教程 3:Vue-cli,生命周期钩子
  7. GideView 动态列模板
  8. secureCRT连接问题
  9. 图解WindowsXP修改MAC地址
  10. 三层交换网络的各层职责