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

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

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

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(",");
                }
        }
    }

代码很简单和简洁,但我感觉里面透着些耍小聪明的意思,因为他迂回了。就我的性格,做事就是单刀直入的,实在不行了再行迂回战术。可能是性格的原因吧。所以我就考虑直接在循环上想办法这样才够优雅和智慧。(不是自已拍自已马屁,只是对代码优雅的不同定义而已,呵呵,勿拍砖)先来看看规律,数组长度是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,好了大功告成,下面是完整代码。

 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(",");
           }

        }
    }

时间: 2024-12-09 20:56:36

一道面试题分享(数组反转排列)的相关文章

每天一道面试题LeetCode 206 -- 反转链表

LeetCode206 反转链表 思路 代码 # # @lc app=leetcode.cn id=206 lang=python3 # # [206] 反转链表 # # https://leetcode-cn.com/problems/reverse-linked-list/description/ # # algorithms # Easy (61.53%) # Likes: 624 # Dislikes: 0 # Total Accepted: 112.8K # Total Submiss

一道面试题: C能申请的最大全局数组大小?

一道面试题: C能申请的最大全局数组大小?第一反应好像是4GB,但明显不对,代码和数据都要占空间,肯定到不了4GB.但是又想内存可以和硬盘数据交换,那到底是多少?应该是32位系统是理论上不能超过4GB(因为地址宽度4bytes,寻址的限制),实际中由于OS实现的细节会更少(比如Linux 1GB给了内核),而64位系统不超过2^64-1:内存大小最好大于数组长度,否则导致和磁盘交换数据,性能下降如果是局部变量,分配在栈上,空间会更小,取决于编译器 参考:http://stackoverflow.

关于javascript 数组的正态分布排序的一道面试题

最近几天顶着上海40°的凉爽天气找工作,心里是开心的不要不要的,每次面试都是要坐那里出半天汗才能回过神来,感觉到了这个世界对我深深的爱意,言归正传,面试过程中碰到了几次笔试,其中有这么一道题,由于实际工作中没遇到过,所以留意下来,题目是这样: 有一个数组为:var arr = [1,2,1,3,3,2,4,6,3],通过处理将其变为正态分布的形式: [1,2,3,3,6,4,3,2,1]. 关于正态分布可以查看此链接:http://baike.baidu.com/link?url=OWbFf2p

火柴棍移动的一道面试题

最近有朋友找工作,面试某公司,遇到一个火柴棍移动的面试题,感觉有点意思,在此抛砖引玉. 题目大致是这样的: 一个三个数的式子,移动其中一根火柴,使等式成立,用程序或实现(可以用伪码),输出能成立的等式. 注:"+"可以移走一根火柴变成"-" 例如: 废话不说,直接上代码,哪位网友有更好的方法,请分享一下,多谢 #include <stdio.h> /* 定义操作符号,"+"或"-" */ #define SYMBO

PHP递归创建多级目录(一道面试题的解题过程)

今天看到一道面试题,要写出一个可以创建多级目录的函数: 我的第一个感觉就是用递归创建,具体思路如下: function Directory($dir){ if(is_dir($dir) || @mkdir($dir,0777)){ //查看目录是否已经存在或尝试创建,加一个@抑制符号是因为第一次创建失败,会报一个“父目录不存在”的警告. echo $dir."创建成功<br>"; //输出创建成功的目录 }else{ $dirArr=explode('/',$dir); /

0810------笔试题----------腾讯2012年的一道笔试题

1.题目要求 a)b[i] = a[0] *a[1] *a[2]*….a[n-1]/ a[i],求出数组b: b)要求不能用除法,除循环控制变量以外,不许额外申请其余变量,时间复杂度为O(n),空间复杂度为O(1). 2.程序思路 a)假设 N = 5,那么 b[0] =      a[1]*a[2]*a[3]*a[4];            b[1] = a[0]*     a[2]*a[3]*a[4];            b[2] = a[0]*a[1]*     a[3]*a[4];

关于阿里的一道笔试题分析

其题目如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 #pragma pack(2) class A { public:     int i;     union U     {         char buff[13];         int i;     }u;     void foo() {    }     typedef char* (*f)(void*);     enum{red, green, blue} color; }a; class A

最大值、最小值、平均值、和、数组反转、数组排序

import java.util.Arrays; import java.util.Scanner; public class ArrayUtils {     //获取数组的最大值     public static void main(String[] args) { //        int[] arr=new int[]{12,4,76,-9,0,44,-87,66};         int num;         Scanner s;                  while

【转】腾讯高级工程师:一道面试题引发的高并发性能调试思考

https://dbaplus.cn/news-21-625-1.html 这样打破沙锅问到底的精神十分可贵!注意其中用到的工具 4月份的时候看到一道面试题,据说是腾讯校招面试官提的:在多线程和高并发环境下,如果有一个平均运行一百万次才出现一次的bug,你如何调试这个bug?(知乎原贴地址如下:https://www.zhihu.com/question/43416744) 遗憾的是知乎很多答案在抨击这道题本身的正确性,虽然我不是这次的面试官,但我认为这是一道非常好的面试题.当然,只是道加分题,