基本算法
文章平均质量分 71
一些基本算法
Powerstot
热爱仅仅只是热爱
展开
-
KMP算法
基础知识文本串:aabaabaaf(长度m)模式串:aabaaf(长度n)时间复杂度:O(m * n)解决问题文本串中是否有模式串原理过程依赖于前缀表的特性前缀:一个串中包含第一个字符,不包括最后一个字符的所有子串例如:aabaaf的前缀包括,a, aa, aab, aaba, aabaa后缀:一个串中包含最后一个字符,不包含第一个字符的所有子串例如:aabaaf的后缀包括,f, af, aaf, baaf, abaaf求出最长相等前后缀:对于aabaaf他的所有子串最原创 2021-05-17 15:51:03 · 82 阅读 · 0 评论 -
异或的性质与应用
定义异或是一种基于二进制的位运算,用符号XOR或者 ^ 表示,其运算法则是对运算符两侧数的每一个二进制位,同值取0,异值取1。它与布尔运算的区别在于,当运算符两侧均为1时,布尔运算的结果为1,异或运算的结果为0。简单理解就是不进位加法,如1+1=0,,0+0=0,1+0=1。性质1、交换律2、结合律(即(ab)c == a(bc))3、对于任何数x,都有xx=0,x0=x4、自反性 A XOR B XOR B = A xor 0 = A自反性应用举例异或运算最常见于多项式除法,不过它最重转载 2021-05-06 13:15:09 · 609 阅读 · 0 评论 -
二分法:根据mid的值将待搜索区间分为两个部分
主要思路定义target在左闭右闭区间内,即在 nums[left…right] 里查找 target循环条件写成while(left < right),在只分两个区间讨论的情况下,循环退出之后一定有left == right根据nums[mid]所在区间把待搜索区间分为两个部分:存在目标元素的区间 和 一定不存在目标元素的区间将会有两种分法:例如,mid在在左边区间,那么区间就分为[left … mid] 与 [mid + 1… right]两部分,右左边界分别为right =原创 2021-04-24 22:26:20 · 262 阅读 · 0 评论 -
双指针:快慢指针,滑动窗口
快慢指针26. 删除有序数组中的重复项给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。思路使用两个指针进行遍历数组i 指针指向要返回位置的下一个,另一指针 j 遍历整个原数组只有当 i 和 j 指向的数不同时,长度加一,即 i++,并将 j 指向的数存入要返回的数组长度中代码public int removeDuplicates(i原创 2021-04-19 11:24:16 · 132 阅读 · 0 评论 -
关于时间复杂度
时间复杂度基本概念什么是大O:大O是用来表示上界的,用它当做算法最坏的情况的运行时间上限,即对任意数据输入的运行时间的上限O(n^2)的算法为什么有时候比O(n)的算法更优?在决定使用算法时,不是时间复杂度越低越好,因为简化后的时间复杂度忽略了常数项,需要考虑数据规模,如果数据规模很小,有时候O(n^2)甚至比O(n)要好(在有常数项的时候)如:O(5n^2) 和O(100n) 在n<20之前,O(5n ^2)比O(100n)要快...原创 2021-04-07 11:45:23 · 1347 阅读 · 0 评论 -
矩阵快速幂
1.根据递推公式写出矩阵矩阵的乘法:C[i][j] = A矩阵中第i行与B矩阵中第j列对应位置的乘积之和即 C[i][j] = A[i][k] * B[k][j] (1<=k<=n)例如:f(n)=f(n-1)+2*f(n-2)+3*f(n-3)推导出↓1 2 3 f(n-1) f(n)1 0 0 * f(n-2) = f(n-1)0 1 0 f(n-3) f(n-2)(T矩阵) (An-1) (An)矩阵的第一行就是递推公式下面几行只要满足右边矩阵即可,即需要的就原创 2021-03-17 22:14:51 · 110 阅读 · 0 评论