美文网首页leetcod...
第二天:leetcode 一个视频教会你必考的8种数据结构(视频

第二天:leetcode 一个视频教会你必考的8种数据结构(视频

作者: 鹏城十八少 | 来源:发表于2022-09-17 23:07 被阅读0次

    关于作者:

    大家好,我是Leetcode 2020--2022,连续3年金牌获得者,和亚洲区域赛铜牌获得者,

    先后在字节和大疆从事技术研发,现在是阿里达摩院的扫地僧,面试专家,CSDN博客专家。

    对算法一定的见解,是一个刷题10年的算法爱好者 ,利用工作之余刷leetcode。成为leetcode官方答案贡献者之一。

    1.数组:读多写少     标签:连续

    2.链表:写多读少     标签:插入,删除,反转       指针指向下一个元素 (dumpNode,preNode,NextNode)

    3.栈:先进后出         标签:更大,对称(LinkList) 边遍历边删除

    4.队列:先进先出

    5.哈希表:键值队 ,哈希碰撞,     标签: 次数,重复

    6.哈希set集合:独一无二 标签:去重

    7.树    

    8.堆:最大堆和最小堆        标签:第k个

    9.图:了解

    总结: 常考的就4种:数组,链表,字符,二叉树

    访问:Access

    搜索:Search

    插入:Insert

    删除:Delete

    总结: 需要掌握增删改查的时间复杂度

    第一数组

    特点:连续,相同类型的数据

    数组的特点:插入和删除效率低!   读多写少

    数据2个性

    1.元素:也就是值

    2.索引

    增 :O(N)           插入:需要移动

    删:O(N)            需要移动

    改:O(N)   

    访问;查:O(1)   通过索引找

    搜索:O(N)          找到值

    1.创建数组

    int[] arr1= new int[3];

    int[] arr = new int[]{1,2,3, …};

    2.修改元素

    arr[i]=value

    3.添加元素

    一般数组是不能添加元素的,因为他们在初始化时就已定好长度了,不能改变长度。

    通过数组转集合

    4.删除元素

    和添加一样,必须通过一个新数组来实现的

    5.查找某个元素

    通过遍历。然后判断是否相等

    6.排序

    Arrays.sort(people);

    7.二维数组的基本API

    56题和200题

    代码举例:

    ---------------------------------------------

    1.0485题 :最大连续1的个数   太简单了

    2.0283题:  移动0太简单了

    3. 0027题: 移除元素               简单(最重要的,双指针)

    ----------------------------------

    0035.搜索插入位置

    0027.移除元素

    0026.删除排序数组中的重复项

    0209.长度最小的子数组

    0059.螺旋矩阵II

    第二:链表

    单链表:非顺序存储,顺序访问,不需要内存连续。

    靠NEXT指针。找到下一个元素

    因为不连续

    访问:O(N)     通过key,得到值

    搜索 :O(N)    找value值

    插入O(1):     注意如果是插入某个索引的位置是O(N)

    删除O(1)

    特点:写多读少

    因为插入的时间复杂度是O1

    1).创建链表

    2).添加元素

    3).访问元素

    4).查找元素

    5).删除元素

    6).俩表的长度

    203: 移除链表元素

    206:反转链表 (重要)

    2:两数相加

    21:合并两个有序链表

    平时用到的链表结构:LinkList和LinkHashMap()

    LinkList的基本操作:增删改查

    主要的解决方案:

    1.dummo:添加头节点。 因为会移动链表。所以要有一个保存最开始的

    2.pr-->node

    3.next-->node  

    如何移动指针

    特点:没有指向前面的指针,所以需要定义一个pre

    最后返回dummy .next()。就是链表

    第三:字符串

    String 方式计算加法。

    算法题:反向输出字符串

    算法:翻转字符串成work am I

    字符串中最长不重复子串

    算法题:字符串移除多余空格,且技术单词首字符大写。

    算法  两个字符串 比较最大的公共字符串 ,主要是思路 (面对问题,以大化小)

    最后一道算法: 剑指 Offer 38. 字符串的排列 - 力扣(LeetCode) (leetcode-cn.com)

    第一个只出现一次的字符

    String 转 int。

    重点: 字符的操作规则

    1.字符类型  Character

    字符串遍历后字符的操作

    第一种:

    char c;

    String str=String.valueof(c);

    第二种:

    Stack stackChar = new Stack<>();

    s.toCharArray(); //把String 转成char数组

    3 .字符遍历: s.charAt

    2.字符转ASCALL

    3.ASCALL如何转字符

    第四:二叉数

    父子关系

    1.节点

    2.根节点         所以节点的父亲.最开始那个

    3.叶子节点      没有孩子

    高度: 从下往上      0,1,2

    深度: 从上往下      2,1,0

    层:     从下往上     1, 2,3

    二叉树:  每个节点最多2个孩子

    完全二叉树:

    满二叉树:  

    2者的关系:

    完全二叉树是满二叉树数么?

    满二叉树是完全二叉树么?

    指的是根节点的位置

    前序遍历:根节点----》左子树-----》右子树

    中序遍历:左子树-----》根节点-----》右子树

    后序遍历:左子树-----》右子树------>根节点

    这几个没有做,后面学习解体方法的使用用到

    144 : 前序遍历

    94 :   中序遍历

    145:  后序遍历

    相关文章

      网友评论

        本文标题:第二天:leetcode 一个视频教会你必考的8种数据结构(视频

        本文链接:https://www.haomeiwen.com/subject/baaeortx.html