zoukankan      html  css  js  c++  java
  • 找出数组中第二大数

    如题,其实这个题目记得大学里教过的,即兴写了一个,记录代码如下:

        class Program
        {
            
    static void Main(string[] args)
            {
                
    int[] ar = { 126345 };
                
    try
                {
                    Console.WriteLine(get2rdMax(ar).ToString());
                }
                
    catch(Exception exc)
                {
                    Console.WriteLine(exc.Message);
                }
            }

            
    private static int get2rdMax(int[] ar)
            {
                
    int max=ar[1], s_max=ar[1];
                
    for (int i = 0; i < ar.Length; i++)
                {
                    
    if (ar[i] > s_max)
                    {
                        s_max 
    = ar[i];
                        
    if (s_max > max)
                        {
                            max 
    += s_max;
                            s_max 
    = max - s_max;
                            max 
    -= s_max;
                        }
                    }
                }

                
    if (max == s_max)
                    
    throw new Exception("no second max!");
                
    else
                    
    return s_max;
            }
            

        } 

    问上面这个问题的同学说1003261009347 };就有漏洞了,我仔细查了下教科书中说的是不同的数。那么非得有重复的咋办呢?

    以下是我的解决方案,并祝这位同学面试顺利! 

        class Program
        {
            
    static void Main(string[] args)
            {
                
    int[] ar = { 126345 };
                
    int[] ar2 = { 100,1003261009347 };
                
    try
                {
                    Console.WriteLine(get2rdMax(ar).ToString());
                    Console.WriteLine(get2rdMax(ar2).ToString());
                }
                
    catch(Exception exc)
                {
                    Console.WriteLine(exc.Message);
                }
            }

            
    private static int get2rdMax(int[] ar)
            {
                
    if (ar.Length < 2)
                    
    throw new Exception("no second max!");

                
    int max=ar[0], s_max=ar[0];

                
    for (int i = 1; i < ar.Length; i++)
                {
                    
    int index = ar[i];

                    
    if (index == max)
                        
    continue;//重复值问题

                    
    if (s_max == ar[0&& max == ar[0])
                    {
                        s_max 
    = index;
                    }
                    
                    
    if (index > s_max)
                    {
                        s_max 
    = index;
                    }

                    
    if (s_max > max)
                    {
                        max 
    += s_max;
                        s_max 
    = max - s_max;
                        max 
    -= s_max;
                    }
                    
                }

                
    if (max == s_max)
                    
    throw new Exception("no second max!");
                
    else
                    
    return s_max;
            }
            

        } 

    作者:KKcat
        
    个人博客:http://jinzhao.me/
        
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    常见算法的时间复杂度
    electron 展示pdf
    AudioContext
    js 计算文字宽度
    python 窗口被关闭报错
    qq行情数据。sina行情JOSN,建议用qq,涨跌,财务数据有-市盈
    python AttributeError: 'NoneType' object has no attribute 'prepare'
    策略日志
    使用Python下载A股行情的几种方法
    easytrader
  • 原文地址:https://www.cnblogs.com/jinzhao/p/1997667.html
Copyright © 2011-2022 走看看