疑问

  1. 为啥链表的删除是O(1),难道不需要找到要删除结点的前面那个元素么?
    其实有两种方法可以删除一个链表中的某个节点:假设链表为A->B->C->D->E->F, 删除的节点为C
    1. 第一种方法,我们每次遍历当前节点的下一个结点是否为我们要找的C,如果是则当前节点的next指针为当前节点下下一个指针指向的节点,在例子中就是我们判断到节点B的下一个指针为要删除的节点C,此时将B的指针指向B的下一个节点的下一个节点就可以删除链表中的节点C
    2. 第二种方法:我们遍历每个节点是否为要删除的节点C,例如当前节点为C,那么我们可以将下一个节点的值与现在我们所在的要删除的节点C的值互换,之后再将节点C的下一个节点的指针指向节点C指向的下一个节点的下一个节点。在例子中我们就是遍历到节点C时,将D的值赋值给C,然后将C的next指针指向E(C指向的下一个节点的下一个节点)
  2. 为什么查找元素是否在里面,使用set和hash table 时间复杂度为o(1)
  3. 为啥链表的prepend操作时间复杂度为O(1):prepend其实就是头插法(头部插入)
  4. 为啥栈的插入和删除时间复杂度为O(n)
  5. 用队列实现栈:参考自己写的https://leetcode-cn.com/problems/implement-stack-using-queues/solution/python3zhi-xing-da-bai-9729yong-hu-huan-ying-zhi-z/
  6. 225题(队列实现栈)代码以及思路,改进自己的232(栈实现队列:老师使用双栈,类似于负负得正)题,两道题老师都没有给出代码
  7. 堆的各种类型上各种操作的时间复杂度看图,优先队列与堆的关系,堆中左右子节点一定是有序的么
  8. Stack通常的操作
    Stack() 建立一个空的栈对象
    push() 把一个元素添加到栈的最顶层
    pop() 删除栈最顶层的元素,并返回这个元素
    peek() 返回最顶层的元素,并不删除它
    isEmpty() 判断栈是否为空
    size() 返回栈中元素的个数

LeetCode上所有关于SlidingWindow的题目都是很容易考到的高频题目

9.while (~scanf("%d%d",&m,&n))什么用的?
10.为什么c++使用优先队列建堆的时间复杂度为o(n)

posted @ 2020-01-31 08:48  yirufeng  阅读(141)  评论(0编辑  收藏  举报