zoukankan      html  css  js  c++  java
  • 寻找数组中最大值和最小值

      题目来源:《编程之美》2.10

      题目:同时找出数组中的最大数和最小数

      分析:最基本的方法是两次线性扫描数组,分别找出最大数和最小数,时间复杂度为O(n)。其实我们可以一次扫描即可。首先,我们将输入元素相互进行比较,然后把较小的与当前最小值比较,把较大的与当前最大值进行比较。这样,对每两个元素共需3次比较。

      如何设定已知的最大值和最小值的初始值依赖于n是奇数还是偶数。如果n是奇数,我们就将最大值和最大值的初值都设定为第一个元素的值,然后成对地处理余下的元素。如果n是偶数,就将对前两个元素做一次比较,以决定最大值和最小值的初值,然后与n是奇数的情形一样,成对地处理余下的元素。

      下面分析一下总的比较次数。如果n是奇数,那么总共进行3⌊n/2⌋次比较。如果n是偶数,则是先进行一次初始比较,然后进行3(n-2)/2次比较,总共3n/2-2此次比较。因此,不管哪一种情况,总的比较次数至多是3⌊n/2⌋

      参考资料:《算法导论》第九章 中位数与顺序统计量

    #include<iostream>
    using namespace std;
    
    void FindMaxAndMin(int a[], int len, int *max, int *min) {
        if (a == NULL || len <= 0)
            return;
    
    
        if (len == 1) { // 只有一个元素的时候
            *max = *min = a[0];
            return;
        }
    
        *max = 0;
        *min = 0;
    
        long temp_min = 0;
        long temp_max = 0;
        int index = 0;
    
        if (len & 1 ==0) { //如果是偶数个元素
            index = 2;
            if (a[0] < a[1]) {
                *min = a[0];
                *max = a[1];
            } else {
                *min = a[1];
                *max = a[0];
            }
        } else {
            index = 1;
            *min = *max = a[0];
        }
    
        for (; index < len - 1; index++) {
            temp_min = a[index] < a[index+1] ? a[index] : a[index+1];
            temp_max = a[index] + a[index+1] - temp_min;
    
            *min = *min < temp_min ? *min : temp_min;
            *max = *max > temp_max ? *max : temp_max;
        }
    }
    
    int main() {
        int a[] = {};
        int b[] = {1};
        int c[] = {1,2,3,4,5};
        int d[] = {1,2,3,4,5,6};
    
        int min = 0;
        int max = 0;
    
        FindMaxAndMin(d, sizeof(d) / sizeof(int), &max, &min);
        cout<<max<<" "<<min<<endl;
        return 0;
    }
  • 相关阅读:
    hibernate案例 测试代码
    android开发 单击按钮 实现页面间的跳转
    hibernate的dao操作不能提交到数据库问题的解决
    hibernate初探
    Could not find action or result 导致 页面出现404错误
    严重: Exception starting filter struts2
    myeclipse 右键 Add Struts... 页面报404 错误
    tomcat错误信息解决方案【严重:StandardServer.await: create[8005]
    struts2 package元素配置(转载)
    TensorFlow和深度学习新手教程(TensorFlow and deep learning without a PhD)
  • 原文地址:https://www.cnblogs.com/vincently/p/4782868.html
Copyright © 2011-2022 走看看