码迷,mamicode.com
首页 > 编程语言 > 详细

一道面试题分享(数组反转排列)

时间:2014-11-17 19:15:54      阅读:287      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   ar   os   使用   sp   for   

题 目如下:一个数组求反转结果,不使用Reverse方法。

面试时没过,当时有点紧张,知道是与高中知识数列有关。后来又在网上恶补了一下,也在网上找到了一个解决方案。先贴下网上的解决方案。

 

bubuko.com,布布扣
class Program
    {
        static void Main(string[] args)
        {
           int[] ts=new[] {1,2,3,4,5,6,7};
          
           int[] ts2 = new int[ts.Length];
           for (var i = 0; i < ts.Length; i++)
           {
               ts2[i]=ts[ts.Length-i-1];
           }
            for (var i = 0; i <  ts.Length; i++)
                {
                    Console.WriteLine("value:{0}", ts2[i]);
                    Console.WriteLine(",");
                }
        }
    }
View Code
View Code

代码很简单和简洁,但我感觉里面透着些耍小聪明的意思,因为他迂回了。就我的性格,做事就是单刀直入的,实在不行了再行迂回战术。可能是性格的原因吧。所以我就考虑直接在循环上想办法这样才够优雅和智慧。(不是自已拍自已马屁,只是对代码优雅的不同定义而已,呵呵,勿拍砖)先来看看规律,数组长度是0,1,2,3,4,5,6,7,8,9....对应的循环是0,0,1,1,2,2,3,3,4,4。。。再观察下,就是奇偶的循环数是一样的。这样我们就会想到高中对于奇偶的通项公式。(-1)^n-1,然后再观察,会发现循环次数是为偶数的长度除以2,即 len/2.这样把奇数变成偶数除以2不就得了。奇数变偶数,一般就是奇数-1,然后,试一下,得出通项公式为 (n+((-1)^n-1)/2)/2这样把1代入得0,2代入得1,这就是我们要找的了。于是化简下公式得,2n+((-1)^n-1)/4,好了大功告成,下面是完整代码。

bubuko.com,布布扣
 class Program
    {
        static void Main(string[] args)
        {
           int[] ts=new[] {1,2,3,4,5,6,7};

           var n = ts.Length;
           var n1 = (2 * n + (Math.Pow((-1), n) - 1)) / 4;
           Console.WriteLine("value:{0}\n\n", n1);
           for (var i = 0; i < n1; i++)
           {
               int temp;
               temp = ts[i];
               ts[i] = ts[n - 1 - i];
               ts[n - 1 - i] = temp;
           }
           for (var i = 0; i < n; i++)
           {
               Console.WriteLine("value:{0}", ts[i]);
               Console.WriteLine(",");
           }

          
        }
    }
View Code

 

一道面试题分享(数组反转排列)

标签:style   blog   http   color   ar   os   使用   sp   for   

原文地址:http://www.cnblogs.com/shanBlog/p/4103880.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!