常见试题和算法

Posted summer0space

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了常见试题和算法相关的知识,希望对你有一定的参考价值。

一、常见字符串和文件操作

1php翻转中文字符串

1

2

3

4

5

6

7

8

9

function reverse($str){

    $r = array();

    for($i=0; $i<mb_strlen($str); $i++){

        $r[] = mb_substr($str, $i, 1, ‘UTF-8‘);

    }

    return implode(array_reverse($r));

}

echo reverse(‘www.phpha.com天涯PHP博客‘);

//结果:客博PHP涯天moc.ahphp.wwww‘

2PHP计算URL的文件后缀名

1

2

3

4

5

6

7

8

function getext($url){

    $data = parse_url($url);

    $path = $data[‘path‘];

    $info = pathinfo($path);

    return $info[‘extension‘];

}

echo getext(‘http://blog.phpha.com/archives/1670.html?id=1670‘);

//结果:‘html‘

3PHP计算两个文件的相对路径

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

function getrpath($path, $conpath){

    $pathArr = explode(‘/‘, $path);

    $conpathArr = explode(‘/‘, $conpath);

    $dismatchlen = 0;

    for($i=0; $i<count($pathArr); $i++){

        if($conpathArr[$i] != $pathArr[$i]){

            $dismatchlen = count($pathArr) - $i;

            $arrleft = array_slice($pathArr, $i);

            break;

        }

    }

    return str_repeat(‘../‘, $dismatchlen).implode(‘/‘, $arrleft);

}

$a = ‘/a/b/c/d/e.php‘;

$b = ‘/a/b/12/34/5.php‘;

echo getrpath($a, $b);

//结果:‘../../../c/d/e.php‘

4PHP遍历目录下的所有文件和文件夹

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

function finddir($dir){

    $files = array();

    if(is_dir($dir)){

        if($handle = opendir($dir)){

            while(($file = readdir($handle)) !== false){

                if($file != ‘.‘ && $file != ‘..‘){

                    if(is_dir(rtrim($dir, ‘/‘).‘/‘.$file)){

                        $files[$file] = finddir(rtrim($dir, ‘/‘).‘/‘.$file);

                    }else{

                        $files[] = rtrim($dir, ‘/‘).‘/‘.$file;

                    }

                }

            }

            closedir($handle);

        }

    }

    return $files;

}

print_r(finddir(‘F:/Golang/src‘));

//结果:

Array

(

    [0] => F:/Golang/src/hello.go

    [1] => F:/Golang/src/src.exe

    [test] => Array

        (

            [0] => F:/Golang/src/test/sss.txt

        )

  

)

 

二、常见算法的实现

1、冒泡排序

1

2

3

4

5

6

7

8

9

10

11

12

13

function bubble_sort($arr) {

    $n=count($arr);

    for($i=0;$i<$n-1;$i++){

        for($j=$i+1;$j<$n;$j++) {

            if($arr[$j]<$arr[$i]) {

                $temp=$arr[$i];

                $arr[$i]=$arr[$j];

                $arr[$j]=$temp;

            }

        }

    }

    return $arr;

}

2、归并排序

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

function Merge(&$arr, $left, $mid, $right) {

  $i = $left;

  $j = $mid + 1;

  $k = 0;

  $temp = array();

  while ($i <= $mid && $j <= $right)

  {

    if ($arr[$i] <= $arr[$j])

      $temp[$k++] = $arr[$i++];

    else

      $temp[$k++] = $arr[$j++];

  }

  while ($i <= $mid)

    $temp[$k++] = $arr[$i++];

  while ($j <= $right)

    $temp[$k++] = $arr[$j++];

  for ($i = $left, $j = 0; $i <= $right; $i++, $j++)

    $arr[$i] = $temp[$j];

}

  

function MergeSort(&$arr, $left, $right)

{

  if ($left < $right)

  {

    $mid = floor(($left + $right) / 2);

    MergeSort($arr, $left, $mid);

    MergeSort($arr, $mid + 1, $right);

    Merge($arr, $left, $mid, $right);

  }

}

3、二分查找-递归

1

2

3

4

5

6

7

8

9

10

11

12

13

function bin_search($arr,$low,$high,$value) {

    if($low>$high)

        return false;

    else {

        $mid=floor(($low+$high)/2);

        if($value==$arr[$mid])

            return $mid;

        elseif($value<$arr[$mid])

            return bin_search($arr,$low,$mid-1,$value);

        else

            return bin_search($arr,$mid+1,$high,$value);

    }

}

4、二分查找-非递归

1

2

3

4

5

6

7

8

9

10

11

12

function bin_search($arr,$low,$high,$value) {

    while($low<=$high) {

        $mid=floor(($low+$high)/2);

        if($value==$arr[$mid])

            return $mid;

        elseif($value<$arr[$mid])

            $high=$mid-1;

        else

            $low=$mid+1;

    }

    return false;

}

5、快速排序

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

function quick_sort($arr) {

    $n=count($arr);

    if($n<=1)

        return $arr;

    $key=$arr[0];

    $left_arr=array();

    $right_arr=array();

    for($i=1;$i<$n;$i++) {

        if($arr[$i]<=$key)

            $left_arr[]=$arr[$i];

        else

            $right_arr[]=$arr[$i];

    }

    $left_arr=quick_sort($left_arr);

    $right_arr=quick_sort($right_arr);

    return array_merge($left_arr,array($key),$right_arr);

}

6、选择排序

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

function select_sort($arr) {

    $n=count($arr);

    for($i=0;$i<$n;$i++) {

        $k=$i;

        for($j=$i+1;$j<$n;$j++) {

           if($arr[$j]<$arr[$k])

               $k=$j;

        }

        if($k!=$i) {

            $temp=$arr[$i];

            $arr[$i]=$arr[$k];

            $arr[$k]=$temp;

        }

    }

    return $arr;

}

7、插入排序

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

function insertSort($arr) {

    $n=count($arr);

    for($i=1;$i<$n;$i++) {

        $tmp=$arr[$i];

        $j=$i-1;

        while($arr[$j]>$tmp) {

            $arr[$j+1]=$arr[$j];

            $arr[$j]=$tmp;

            $j--;

            if($j<0)

                break;

        }

    }

    return $arr;

}

 

原文: http://blog.phpha.com/

来源: phpha 发布时间:2015-04-14 17:24 阅读次数:141

以上是关于常见试题和算法的主要内容,如果未能解决你的问题,请参考以下文章

笔试题大集合

C语言试题167之字符串加密和解密算法

常见校招笔试题汇总(这些不会,笔试可能要凉凉呀)

C语言试题167之字符串加密和解密算法

经典算法题:深度和广度优先遍历(Oracle笔试题)

华为OD机试题,用 Java 解滑动窗口最大和问题