左程云视频笔记

近期正在观看和学习第四期左程云牛客算法视频,记录学习过程。

(持续更新)


第一课~

讲解时间复杂度,衡量算法的标准之一。

讲解了排序算法,首先是比较类型的排序算法。

1.冒泡排序

2.选择排序

选择最大/最小,交换到已排序的后面一个为止。

3.插入排序

当前最大/最小与已排序的比较,插入到第一个符合条件为止。

4.归并排序(小和问题,逆序对问题)

5.快速排序(通过荷兰国旗问题引入)

6.堆排序(中位数问题)

堆,完全二叉树的逻辑结构,可以用数组模拟其建立过程。

首先建立堆,之后调整堆。

总结:4,5,6的排序算法重要的前提下,其思想会用到之后很多问题。

非交换排序

1.桶排序(桶的思想)

2.计数排序

3.基数排序(未讲)


第二课 ~

栈/队列

首先是数组模拟队列/栈的建立(通过引入当前数组的size变量,解耦队列两个指针的关系)

队列实现栈/栈实现队列问题

通过两个队列/两个栈模拟栈/队列。

判断是否为回文字符串(利用栈结构)

猫狗队列(新建时间戳封装)


二维数组

回字打印,旋转数组,之字打印,有序二维数组找数。


链表

反转单向链表/双向链表

1.单向链表反转(三种方法)

其中一种的模板

判断cur.next不为空

循环

tmp=cur.next

cur.next=pre

pre=cur

cur=tmp

2.链表结构判断是否为回文(快慢指针)

3.判断两个单向链表是否相交

首先判断是否为有环链表,hashset方法或快慢指针方法

分三种情况,无环单链表,有环单链表,一个有环一个无环。

4.拷贝特殊结构的链表(hashmap/后续嵌入结点)


第三课~

树结构

1.二叉树的前序,中序,后序遍历(递归版本)

非递归版本:

前序,需要依赖于一个栈结构,打印栈顶,右子树入栈后,左子树入栈。

curr = head

stack.push(curr)

while(!stack.isempyt()){

    curr = stack.pop()

    print curr.value

    if curr.right! = null

    stack.push(curr.right())

    if curr.left ! = null

    stack.push(curr.left())

}

中序,首先让左子树入栈,之后为左子树为空后,弹出当前,打印,右子树入栈。循环(栈空/结点空)

curr = head()

while(curr!=null||!stack.isempty()){

    if curr!=null:

        stack.push(curr)

        curr = curr.left()

    else:

        curr = stack.pop()

        print(curr)

        curr = curr.right()

}

后序,依赖于两个栈实现,首先左子树入栈,之后右子树入栈,弹出栈顶,入第二个栈。

curr = head

stack.push(curr)

while(!stack.isempty()){

    curr = stack.pop()

    stack2.push(curr)

    curr.left!=null

    stack.push(curr.left)

    curr.right!=null

    stack.push(curr.righr)

}

2.二叉树的前驱和后继(中序遍历的结果)

前驱:

if curr.right!=null:

    ger_curr_left_node(curr.right)

else:

    parent = curr.parent

    while parent.left != curr

        curr = parnet

        parent = curr.parent

后继:

3.二叉树的序列化与反序列化

4.判断二叉树是否为平衡二叉树,搜索二叉树,完全二叉树

判断是否为平衡二叉树(二叉树递归)

struct{

    node node;

    bool isB;

    int h;

}

def process(head)

if node == null:
    return struct(true,0)

left = process(node.left())

if(!left.isb) return struct(false,0)

right = process(node.right())

if(!right .isb) return struct(false,0)

return struct(true,max(left.h,right.h)+1)


判断是否为搜索二叉树,根据搜索二叉树的特点,中序遍历后为升序。

curr = head

while(curr!=null | !stack.empty)

    if curr !=null:

        stack.push(curr)

        curr = curr.left()

    else

        curr = stack.pop()

        比较节点的关系

        curr = curr.right()


判断是否为完全二叉树(递归)

完全二叉树的特点,采用层次遍历

如果有右节点,无左边返回false

left = false

queue.push(head)

while(queue!=empyt)

    head = queue.pop()

    l = head.left

    r = head.right

    if((left==true)&(l!=null|r!=null|)){

        return false;

    }

    if(r!=null,left==null){

        return false

    }

    if l!=null

        queue.push(l)

    if r!=null

        queue.push(r)

    else:

        left = true

计算完全二叉树的结点个数

遍历左边到最后,计算最大深度

遍历右边到最后,计算左边深度

比较左边深度和左边深度

if l=h

  return 1

if 左边等于左边

  左边深度+递归(node.right,l+1,h)

else

  右边深度+递归(node.left,r+1,h)


第四课~

哈希函数,哈希表

布隆过滤器

一致性哈希

前缀树


第五课~

递归与动态规划


第六课~

KMP:两个字符串比对,长字符串是否含有短字符串

1.next数组构建

两个变量,i=2,j=0

遍历短字符串长度求得next数组

if str[i-1] = str[0]:

    next[i++] = ++j

else if j > 0

    j = next[j]

else

    next[i++] = 0

2.利用next数组加速匹配过程

遍历长短字符串的长度

    if str1[i1] == str2[i2]

        i1++

        i2++

    else if next[i2]!=-1

        i2 = next[i2]

    else

        i1++

If i2==str2.length

    return true

else

    return false

3.manacher算法

4.BFPRT

5.双端队列

6.单调栈

7.搜索树

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,657评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,889评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,057评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,509评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,562评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,443评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,251评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,129评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,561评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,779评论 3 335
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,902评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,621评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,220评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,838评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,971评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,025评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,843评论 2 354

推荐阅读更多精彩内容

  • 目录 1. 栈和队列1.用两个队列实现栈2.用两个栈实现队列3.实现一个栈,可以用常数级时间找出栈中的最小值4.判...
    MigrationUK阅读 3,033评论 4 20
  • 课程介绍 先修课:概率统计,程序设计实习,集合论与图论 后续课:算法分析与设计,编译原理,操作系统,数据库概论,人...
    ShellyWhen阅读 2,286评论 0 3
  • 《就想开一间自己的小店》读后感 再看书的过程中有些语句比较有感触 学历代表过去,能力代表现在,学习力代表未来 人生...
    平平宝妈阅读 155评论 0 0
  • 我们真的知道在自己做什么吗?我感觉好像不是这样的,在很多时候我们并不知道自己在做什么,就像有时候我们不理解别人为什...
    Huyuman阅读 315评论 0 0