关于作者:
大家好,我是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: 后序遍历
网友评论