zoukankan      html  css  js  c++  java
  • 常见算法面试题

    前言

    正文

    1、解释算法的时间复杂度?

    算法的时间复杂度表示程序运行完成所需的总时间,它通常用大O表示法来表示。

    2、解释二分法检索如何工作?

    在二分法检索中,我们先确定数组的中间位置,然后将要查找的值与数组中间位置的值进行比较,若小于数组中间值,则要查找的值应位于该中间值之前,依此类推,不断缩小查找范围,直至得到最终结果。

    代码拓展,二分法查找
    def BinarySearch(t,x):
        t.sort() #对列表进行排序,列表是有序的,是二分法的前提
        low = 0;
        high = len(t)-1;
        while low < high:
            mid = (low+high)/2;
            if t[mid]<x:
                low=mid+1;
            elif t[mid]>x:
                high = mid-1;
            else :
                return mid
        return Non
    

    3、解释什么是推排序?

    堆排序可以看成是选择排序的改进,它可以定义为基于比较的排序算法。它将其输入划分为未排序和排序的区域,通过不断消除最小元素并将其移动到排序区域来收缩未排序区域。

    4、解释什么是快速排序算法?

    (1)通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列;

    (2)空间复杂度为O(log2n);

    (3)时间复杂度比较复杂,最好的情况是O(n),最差的情况是O(n2),所以平时说的O(nlogn),为其平均时间复杂度。

    5、解释插入排序算法的空间复杂度是多少?

    插入排序是一种就地排序算法,这意味着它不需要额外的或仅需要少量的存储空间。对于插入排序,它只需要将单个列表元素存储在初始数据的外侧,从而使空间复杂度为O(1);

    6、解释什么是“哈希算法”,它们用于什么?

    “哈希算法”是一个哈希函数,它使用任意长度的字符串,并将其减少为唯一的固定长度字符串。它用于密码有效性、消息和数据完整性以及许多其他加密系统;

    7、解释如何查找链表是否有循环?

    要知道链表是否有循环,我们将采用两个指针的方法;如果保留两个指针,并且在处理两个节点之后增加一个指针,并且在处理每个节点之后,遇到指针指向同一个节点的情况,这只有在链表有循环时才会发生。

    8、解释什么是基数排序算法?

    基数排序又称“桶子法”,是通过比较数字将其分配到不同的“桶里”来排序元素的。它是线性排序算法之一。

    9、解释什么是递归算法?

    递归算法是一个解决复杂问题的方法,将问题分解成较小的子问题,直到分解的足够小,可以轻松解决问题为止。通常,它涉及一个调用自身的函数。

     10、解释什么是冒泡排序算法?

    冒泡排序算法也称为下沉排序;在这种类型的排序中,要排序的列表的相邻元素之间互相比较;如果它们按顺序排列错误,将交换值并以正确的顺序排列,直到最终结果“浮”出水面。

    11、解释什么是哈希算法?

    参考资料

  • 相关阅读:
    spark学习进度18(SparkSQL读写)
    查看及修改centos的系统时间
    第3章 串
    linux就该这么学 简介
    1 快速入门
    rocketMQ实战与原理解析 简介
    绪论
    数据结构java版 第4版 叶核亚著 简介
    数据结构java语言版 简介
    数据结构与问题求解java版 简介
  • 原文地址:https://www.cnblogs.com/haoxinchen/p/11186417.html
Copyright © 2011-2022 走看看