zoukankan      html  css  js  c++  java
  • 某浪PHP面试题及答案优化

    前几天一网友去国内某知名IT公司某浪面试PHP,在他谈心得的时候得一面试题,下面写问题答案及优化方案,希望大家多提提意见。

    神马,杨辉三角? 

    我估计太久不上学了,当年初中数学及大学C语言课上的杨辉三角完全忘了是什么东西了。而题目恰恰就是:

    问:“用PHP输出杨辉三角”

    经过一阵冥思苦想... ... 什么杰宝的杨辉三角小裤裤啊!!!!问度娘去!!!


    度娘告我:“杨辉三角有曲折的历史和一系列的特征,其中最直观和常用的特征是:每个数字等于上一行的左右两个数字之和。

    ok,要得出答案,构造函数 f(n)即可。

    度娘给出了由二级C语言上机题改造的PHP答案:

    $a[0][0] = 1;
    $row = 10; //所要输出的行号
    for ($i = 0; $i < $row; $i++) {
        for ($j = 0; $j <= $i; $j++) {
            if($j == 0 || $i == $j){
                print $a[$i][$j] = 1;
            } else {
                print $a[$i][$j] = $a[$i-1][$j-1] + $a[$i-1][$j];
            }
             
            print ' ';
        }
        print "
    ";
    }


    它使用了一个二维数组和两层迭代。但我稍加分析后,认为,二维数组完全是浪费,我们只需要关心a[n-1]的数据就足够了,其他的数据完全是打酱油的。本着勤俭持家,节约光荣的优良思想,我将程序改造如下:

    $b = $c = array(1);
    $row = 10;
    for ($i = 0; $i <= $row; $i++) {
        $j = -1;
        while (++$j < $i)
            echo $c[$j] = ($j == $i) ? 1 : (double)$b[$j-1] + $b[$j], ' ';
        echo PHP_EOL;
        $b = $c;
    }

    经过测试,在$row = 1000时,结果如下:

    前者:
    <!--执行时间:2428ms,使用内存:42217KB-->
    后者:
    <!--执行时间:1953ms,使用内存:411KB-->


    (⊙_⊙), good job!



    记:PHP5.4之前版本 三元表达式在大数组运算中会有性能问题,原因及解决请参考:http://www.laruence.com/2011/11/04/2258.html

  • 相关阅读:
    Python增删改查文件
    Python实现验证用户信息后跳转网页的功能
    Python文件操作
    python集合操作
    字典的用法
    二分查找
    git命令记录
    JavaScript高级程序设计window对象学习记录
    JS模块化简介(读书笔记)
    Webpack代码分割 + 懒加载
  • 原文地址:https://www.cnblogs.com/xinyuyuanm/p/3178100.html
Copyright © 2011-2022 走看看