zoukankan      html  css  js  c++  java
  • 顺序统计:寻找序列中的最大最小数

    查找输入序列中的最大最小数值,要求时间复杂度为1.5n

    C#实现如下:

    public class MinMaxFinder<T> where T : IComparable<T>
        {
            public void FindMinMax(T[] array, int startIndex, int endIndex, out T minValue, out T maxValue)
            {
                maxValue = array[startIndex];
                minValue = array[startIndex];
                if ((endIndex - startIndex + 1) % 2 == 0)//偶数个数据
                {
                    for (int i = startIndex; i <= endIndex; i = i + 2)
                    {
                        if (array[i].CompareTo(array[i + 1]) >= 0)
                        {
                            if (array[i].CompareTo(maxValue) > 0) maxValue = array[i];
                            if (array[i + 1].CompareTo(minValue) < 0) minValue = array[i + 1];
                        }
                        else
                        {
                            if (array[i + 1].CompareTo(maxValue) > 0) maxValue = array[i + 1];
                            if (array[i].CompareTo(minValue) < 0) minValue = array[i];
                        }
                    }
                }
                else//奇数个数据
                {
                    for (int i = startIndex; i <= endIndex-1; i = i + 2)
                    {
                        if (array[i].CompareTo(array[i + 1]) >= 0)
                        {
                            if (array[i].CompareTo(maxValue) > 0) maxValue = array[i];
                            if (array[i + 1].CompareTo(minValue) < 0) minValue = array[i + 1];
                        }
                        else
                        {
                            if (array[i + 1].CompareTo(maxValue) > 0) maxValue = array[i + 1];
                            if (array[i].CompareTo(minValue) < 0) minValue = array[i];
                        }
                    }
                    if (array[endIndex].CompareTo(maxValue) > 0) maxValue = array[endIndex];
                    if (array[endIndex].CompareTo(minValue) < 0) minValue = array[endIndex];
                }
            }
        }

    调用方法:

     static void Main(string[] args)
            {
                //int[] data = new int[] { 23, 12, 45, 15, 1, 79, 8 };
                int[] data = new int[] { 23, 12, 45, 15, 1, 79, 8 ,-1};
                var minmaxfinder = new MinMaxFinder<int>();
                int min, max;
                minmaxfinder.FindMinMax(data, 0, data.Length - 1, out min, out max);
                Console.WriteLine("min:{0}  max:{1}", min, max);
                Console.ReadKey();
            }

     

    作者:Andy Zeng

    欢迎任何形式的转载,但请务必注明出处。
    http://www.cnblogs.com/andyzeng/p/3695372.html

  • 相关阅读:
    Git安装配置
    Openstack 错误日志查看方法
    keystone v3.0与2.0的区别
    Python远程调试Openstack
    openstack遇到的错误
    特别翔实的adaboost分类算法讲解 转的
    h5 html5 模拟时钟 页面
    js 面向对象 jquery 全局变量 封装
    HTML5 h5 微信 浮层 提示 点击右上角,从浏览器打开 pop.png
    jquery中ajax使用error调试错误的方法,实例分析了Ajax的使用方法与error函数调试错误的技巧
  • 原文地址:https://www.cnblogs.com/andyzeng/p/3695372.html
Copyright © 2011-2022 走看看