首先可以想到逐步移位,但是这种方法显然太浪费时间,不可取。下面介绍利器『三步翻转法』,以[4, 5, 1, 2, 3]为例。 由以上3个步骤可知其核心为『翻转』的in-place实现。使用两个指针,一个指头,一个指尾,使用for循环移位交换即可 JAVA: C++: 源码分析 首先找到分割点,随后分 ...
分类:
其他好文 时间:
2018-12-20 14:24:43
阅读次数:
196
0.目录 1. "KMP 子串查找算法" 2. "KMP 算法的应用" 3. "小结" 1.KMP 子串查找算法 问题: 如何在目标字符串S中,查找是否存在子串P? 朴素解法: 朴素解法的一个优化线索: 示例: 伟大的发现: 匹配失败时的右移位数与子串本身相关,与目标串无关 移动位数 = 已匹配的字 ...
分类:
编程语言 时间:
2018-12-19 19:30:40
阅读次数:
183
KMP的Next数组:模式串的前缀与后缀的“相交”长度 KMP算法步骤: 1.先算next数组 2.若失配(此时模式串下标为j),利用Next数组求出失配后滑动的新位置 a.Next[j] \geq 0,则模式串右移 j-Next[j] 位 b.Next[j] = -1,则模式串右移 j+1 位 ...
分类:
编程语言 时间:
2018-12-16 21:45:07
阅读次数:
172
解法一:计数排序:统计0,1,2 的个数 时间复杂度:O(n) 空间复杂度:O(k) k为元素的取值范围, 此题为O(1) 解法二:三路快排 时间复杂度:O(n) 空间复杂度:O(1) 只遍历了一遍 ...
分类:
编程语言 时间:
2018-12-15 22:30:31
阅读次数:
248
提交后时间很尴尬,12ms,不确定这个int是多少位的所以直接给了个32位。 说下思路,一个数与它有效位全为1的数异或就能得到它的补数。所以得到全为1数是个关键,从有效位最高位向后一直移位就能得到全为1的数,按照int位向后移位就好了。 ...
分类:
其他好文 时间:
2018-12-13 13:50:02
阅读次数:
157
在Java中,位运算符有很多,例如与(&)、非(~)、或(|)、异或(^)、移位(<<和>>)等。这些运算符在日常编码中很少会用到。 在下面的一个例子中,会用到位掩码(BitMask),其中包含大量的位运算。不只是在Java中,其他编写语言中也是可以使用的。 例如,在一个系统中,用户一般有查询(Se ...
分类:
编程语言 时间:
2018-12-11 16:06:06
阅读次数:
225
平移,旋转和缩放 前言 在这一章节中,平移、旋转和缩放都是以原点为基准的。并且是通过控制坐标系原点的位置来达到图元平移,旋转、缩放的视觉效果。作者在文中的原话是:另一种在屏幕上改变位置和移动物体的技术是改变屏幕的坐标系。举例来说,你可以将一个图形向右移动50像素,你也可以将坐标 (0,0) 向右移动 ...
分类:
其他好文 时间:
2018-12-09 20:08:15
阅读次数:
190
1. u16 g_summ = 0; u8 buf[2] = {0x10, 0x05}; g_summ = (buf[1] << 8) | buf[0]; // g_summ = 0x0510 2. u16 g_summ = 0x0510; buf[0] = (u8 )g_summ; // buf[ ...
分类:
其他好文 时间:
2018-12-08 13:21:23
阅读次数:
119
位运算符(<<,>>,>>>) 左移(<<):所输入数的二进制数向左移,然后在转换为十进制数 注意:移动的位数有限,不能移动到将二进制数1作为第一位,否则转换为十进制数是负数 右移(>>,>>>):所输入数的二进制数向右移,然后在转换为十进制数 >>:有符号右移 >>>:无符号右移 与运算符(&) ...
分类:
其他好文 时间:
2018-12-06 00:04:52
阅读次数:
205
归并排序归并排序是采?分治法的?个?常典型的应?。归并排序的思想就是先递归分解数组,再合并数组。将数组分解最?之后,然后合并两个有序数组,基本思路是?较两个数组的最前?的数,谁?就先取谁,取了后相应的指针就往后移?位。然后再?较,直??个数组为空,最后把另?个数组的剩余部分复制过来即可。归并排序的分析65318724defmerge_sort(alist):iflen(alist)<=1:r
分类:
编程语言 时间:
2018-12-04 18:55:47
阅读次数:
195