zoukankan      html  css  js  c++  java
  • 还记得这三个面试题吗?一次搞定,造福新人

    一、输出全排列
    1、全排列是将一个集合按一定顺序进行排列,如果这个集合有n个元素,那么全排列数为n!个。
    2、举例来说,有字符串数组{"x","y","z"},那么该数组对应的全排列就是xyz,xzy,yxz,yzx,zxy,zyx。有人会问,如果集合是{"x","x","z"},那么该数组对应输出的全排列难道是xxz,xzx,xxz,xzx,zxx,zxx吗?按照全排列的定义,是的,我们不关心输出有重复的情况。
    3、全排列生成的通项公式
    现在我们依照第2步分析归纳全排列的通项公式。为了说明的需要,这一次都从集合的最后一个元素逆向推导,分析如下:
    数组有1个元素: {"x"}    对应全排列 x;
    数组有2个元素: {"y"."x"}   对应全排列 xy,yx,就是以x开头的y的全排列的组合和以y开头的x的全排列的组合
    数组有3个元素: {"z","y","x"}   对应全排列  xyz,xzy,yxz,yzx,zxy,zyx
    就是以x开头的y、z的全排列的组合,以y开头的x、z的全排列的组合,以z开头的x、y的全排列的组合
    ......
    依次类推,从而可以推断,设一个数组集合arr = {ele0, ele1, ele2, ... ,ele(n-1)}(n个元素,0,1,2,...n-1为下标), 全排列表示为xyz(arr),数组关系:dstArri = arr - {ele[i]},
    即原数组arr去掉一个元素,剩下长度n-1的数组dstArri.
    因此xyz(arr) = arr[0]xyz(dstArr0), arr[1]xyz(dstArr1), ... ,arr[i]xyz(dstArri), ...。当i=0时xyz(arr) = ele0。
    那么如何实现呢?分析一下arr[i]xyz(dstArri),你可以发现它的规律,就是:将整组中的所有的元素分别与第一个元素交换,这样就总是在处理后n-1个元素的全排列。没错,就是利用递归实现。
    4、实现代码
    a、c#实现输出集合的全排列

    Code

    b、javascript实现输出集合的全排列

    Code

    ps:我们都知道程序中利用递归不当,可能会导致缓冲区溢出。期待高手非递归版本的全排列算法。
    二、c#实现数组某段区间元素的交换(o(1)复杂度)
    前言:这个纯粹是从老赵那里拿来的,也在我做过的一道笔试题里变相的出现了一下(原题是字符串反转)。这里再贴一次,加深印象。
    问题:有一个数组arr,将arr数组元素从start下标到end下标之间的元素反序一下。
    举例来说,一个数组初始值是[1, 2, 3, 4, 5, 6,7,8,9,10],start为1,end为5,那么当调用了Reverse之后,
    arr数组中的元素便依次成为[1, 6, 5, 4, 3, 2,7,8,9,10],其中从arr[1]到arr[5]之间(含arr[5])的元素被反序了。
    下面是c#实现代码:

    Code

    ps:关于数据元素交换肯定不止这一种方法,不过从算法复杂度角度考虑,这一种是很值得提倡的。
    三、NC的计算斐波那契数列的第N位
    这个NC问题是昨天看到博客园里一位园友的最近遇到的两个面试题兼卖身广告又想起来的。想当初刚毕业那会,被这个面试问题qj很多次,这里贴出递归和迭代两种算法。高手不值一哂,新手也不要当回事,真正的NC问题,哈哈。

    Code



     


    作者:Jeff Wong
    出处:http://jeffwongishandsome.cnblogs.com/
    本文版权归作者和博客园共有,欢迎围观转载。转载时请您务必在文章明显位置给出原文链接,谢谢您的合作。

  • 相关阅读:
    ASP.NET Web API 实现客户端Basic(基本)认证 之简单实现
    WEB API 中HTTP的get、post、put,delete 请求方式
    SQLServer中的事务与锁
    C#迭代器
    C#:异步编程和线程的使用(.NET 4.5 ),异步方法改为同步执行
    SD卡WAV音乐播放器(quartus11.0)(FAT32)(DE2-115)
    Xilinx IP核的根目录地址,有datasheet 和仿真相关的资料
    quartusii 使用ModelSim do文件实现仿真(Verilog)
    怎样用modelsim做后仿真
    ModelSim之tcl自动化仿真
  • 原文地址:https://www.cnblogs.com/jeffwongishandsome/p/1502715.html
Copyright © 2011-2022 走看看