lanshengyougu

1.排序算法题

冒泡排序:通过两层循环,从后往前冒泡,吧最后一个值搞定再搞倒数第二个   O(n2)   

选择排序:先从未排序的序列找一个最小值,然后再从未排序的序列找一个最小值,依次类推进行排序  O(n2)

插入排序:先将前两个数字排序好,然后把后面的数字一个个按照顺序插入到正确的位置    O(n2)

快速排序:以第一个数字为标准,把比他大的和比他小的数字放在两边,依次递归,最后,把左右两个数组和中间的基数 按顺序合并。(时间复杂度是:n*log(n))

2,全排列(包括数组和字符串的全排列)

主要用的是递归的思想:

代码:

/**
 * @param string $s  这个是变化的字符串循环处理这个 从上一个方法的循环可以得到这个,当这个长度为1的时候应该是只是输出
 * @param string $s2 这个是形成的字符串 应该是返回  $s2 . $s[1].$s[2]
 */
function three ($s, $s2 = \'\') {
    $len = strlen($s);
    if($len <= 1) {
        echo $s2.$s.PHP_EOL;
    } else {
        for ($i = 0; $i< $len; $i++) {
            $lin = str_replace($s[$i], \'\', $s);
            three($lin, $s2.$s[$i]);
        }
    }
}

3,银行家算法

操作系统的进程可以动态地申请资源,但系统在进行资源分配之前,应先计算此次资源分配的安全性。

银行家算法是一个避免死锁产生的算法,以银行借贷分配策略为基础,判断并保证系统处于安全状态

元素:

可利用资源向量 avaliable

最大需求矩阵Max

分配矩阵Allocation

需求矩阵Need

计算方法:

循环线程Pi,每次把Available跟Pi的Need比较,如果发现Available中每个元素都大于Need的每个元素,则进行资源分配,进程工作完后把Available=(Available+Allocation),依次循环找到线程分配序列。

银行家算法参考网站:https://blog.csdn.net/ZHLittleRed/article/details/82811249

银行家算法参考视频:https://haokan.baidu.com/v?vid=9195434797561845872&pd=bjh&fr=bjhauthor&type=video

4,二分查找

定义:

二分查找也称折半查找,是一种效率较高的查找方法

算法的要求:

(1)必须采用顺序存储结构

(2)必须按照关键字大小有序排序

算法的步骤:

二分查找也还是比较容易理解的,大概就是一分为二,然后两边比较,保留有效区间,继续一分为二查找,直到找到或者超出区间则结束

时间复杂度O(logN)

扩展题目:

php 两个正序数组的中位数 ,求时间复杂度最小

5,判断是不是质数

质数的定义:

质数又称素数,一个大于1的自然数,除了1和它自身外,不能整除其他自然数的数叫做质数,否则叫做合数。

实现思路:

循环所有可能的备选数字,然后和中间数以下且大于等于2的整数进行整除比较,如果能够被整数,则肯定不是质数,相反,就是质数。

分类:

技术点:

相关文章: