当前位置:   article > 正文

刷题算法与数据结构知识点

刷题算法与数据结构知识点

算法

暴力穷举

O(n^2)

双指针和滑动窗口

一般用来优化暴力穷举,时间复杂度O(n)
常用场景:快慢指针,左右指针以及滑动窗口[left,right]

递归

有起始和终止条件,有递归关系用递归很好解

KMP算法

时间复杂度:O(m+n)

s1="ABCDEF" //主串
S2="ABAA" //模式串 
  • 1
  • 2

最大公共前后缀长度表

ABAA
0011

最大公共前后缀长度表计算

失配时,模式串向右移动的位数为:已匹配字符数 - 失配字符的上一位字符所对应的最大长度值

next数组的话

next 数组的值是除当前字符外(注意不包括当前字符)的公共前后缀最长长度

等价于最大公共前后缀长度表往右移动一位,首位为-1

ABAA
-1001

KMP算法详解(写的非常通俗易懂)

数据结构

数组

存相同的数据类型,有索引

查找O(1)

插入和删除 O(n)

二维数组

int[][] array = new int[][]{{1,2,3}};
int[][] array = new int{{1,2,3}};
  • 1
  • 2

字符串

实质就是不可变(final)的char数组

哈希表

key-value 键值对 哈希函数

解决哈希冲突 (链地址法)

链表

队列

先进先出的结构,front 队首指针,rear 队尾下标

先进后出的结构,push,pop,peek方法

计算器

有效的括号

场景

模式串匹配

KMP

前缀和

即声明一个长度比原数组大一的preSum数组存sum[i0]+…+sum[ij] ,第一个索引值为0,二维数组则是增加一列第一列值为0

这样在计算总和时用这个preSum数组时间复杂度O(n)

1480. 一维数组的动态和

643. 子数组最大平均数 I

304. 二维区域和检索 - 矩阵不可变

字符串去重问题

位运算(这类型题目有点炫技…就不多补充了…感兴趣的可以去leetcode自行找位运算专题)

两个相同的数字进行异或操作得到0

a^a=0;
  • 1

只出现一次的数字

交换两个数字 (一个数异或同一个数两次还是那个数)

int a=10;b=30;
a=a^b;
b=a^b;
a=a^b;
  • 1
  • 2
  • 3
  • 4

相同的数字进行异或操作得到0

a^a=0;
  • 1

待更新…

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/671646
推荐阅读
相关标签
  

闽ICP备14008679号