zoukankan      html  css  js  c++  java
  • [算法] 应用场景

    链表:

    1. 如何判断一个单向链表有环,如何找到入环点?设置一快一慢两个指针指向链表头结点,程序开始后快指针每次前进两个结点,慢指针每次前进一个结点,二者指向同一结点时停止;创建两个每次一步的指针,从头结点和指针交点同时出发,相交处即为入环点
    2. 如何判断两个单向链表相交,如何找到相交结点的位置?设置两个栈,遍历链表并将元素入栈,最后判断栈顶元素是否相同,若相同,将两个栈中的元素出栈,第一个不相等元素的下一个即为交点

    1. 实现一个栈,带有出栈、入栈、取最小元素三个方法,保证时间复杂度都是O(1)。定义一个辅助栈,储存所有曾经的最小值下标,最坏空间复杂度O(N)

    队列

    1. 实现一个队列,带有出队、入队、取最小元素三个方法,保证时间复杂度都是O(1)。

    排序:

    1. 5000个元素,如何用最快的方法选出前10个最大的?堆排(TopK问题,时间复杂度O(nlogk))
    2. 平均时间复杂度为O(nlgn)的算法有?快排、堆排、归并
    3. 每趟排序结束时至少确定一个元素最终位置的排序方法有?简单选择、快排、堆排
    4. 如何合并N条长度为M的有序链表,使合并后的链表也保持有序?方法一:取每个链表第一个元素组成数组,对数组排序(O(NlogN))——取排好序数组的第一个结点,作为新链表的第一个结点——从被取出结点的链表中取下一个结点,插入数组中(O(logN))——重复(M-1)*N次;方法二:取每个链表第一个元素建最大(小)堆(O(N))——取最大(小)值,把该值所处链表的下一个值放到数组起始位置,调整堆(O(lgN))——重复(MN-1)次

    查找:

    1. 登录QQ时,服务器如何在十亿量级的有效QQ号码中快速找到你输入的QQ号,以便取出密码与你输入的密码进行核对?10亿对应2^30,假设每个QQ号信息需要1KB空间,10亿个需要1024GB(1T)的连续存储空间。二分查找在时间上没问题,但由于新的QQ号信息随时都在产生,导致无法保证数据的有序,所以无法使用。
    2. 百度和谷歌如何快速根据你输入的关键词得到相关网页?利用“倒排索引”(单词到文档的映射),散列查找
  • 相关阅读:
    windows ntstatus.h 头文件
    Android Q 后台启动 Activity
    windows 删除文件夹所有文件夹及文件代码
    Android 加壳App Demo
    Android App 签名保护demo
    RXAndroidBle 记录网址
    c++ windows 获取系统时间
    js 代码保存
    day33 ansible
    day31 综合实时同步服务
  • 原文地址:https://www.cnblogs.com/cxc1357/p/10820285.html
Copyright © 2011-2022 走看看