随笔-字符串的排列(巧妙解法-判断 s2 是否包含 s1 的排列)

给定两个字符串 s1 和 s2,写一个函数来判断 s2 是否包含 s1 的排列。 换句话说,第一个字符串的排列之一是第二个字符串的子串。

2019-01-25 03:06:33

阅读数 1030

评论数 0

随笔-找出数组中第K大的值(快速排序,堆排序实现)

题目: 找出数组中第K大的值,要求对数组不能进行排序,时间复杂度为O(nlog2k) 快速排序实现 思路:这个链接为 快速排序的原理(从小到大排序) 如果不懂快排建议先看此链接, 题目的要求是找第K大的数,那么我们将快速排序转换为从大到小排序进行分析。 找第k大的数,其实就是找角标k-1的数...

2019-01-19 00:51:36

阅读数 215

评论数 0

随笔-最大连续1的个数

题目:给定一个二进制数组, 计算其中最大连续1的个数。 示例 1: 输入: [1,1,0,1,1,1] 输出: 3 解释: 开头的两位和最后的三位都是连续1,所以最大连续1的个数是 3. 注意: 输入的数组只包含 0 和1。 输入数组的长度是正整数,且不超过 10,000。 思路:O(n) 解法,...

2019-01-14 10:20:11

阅读数 38

评论数 2

数据结构-排序-堆排序(heapSort)

算法:(只支持从小到大排序) 已知父,推子:左孩子(2n+1) ; 右孩子(2n+2) ; 已知子,推父:子为n ,父为(n-1)/2; 步骤: 建立大根堆>>&...

2019-01-10 10:26:53

阅读数 159

评论数 0

数据结构-排序-归并排序(二路归并)

思路:归并排序是建立在归并操作上的一种有效的排序算法,是采用分治法的一个典型应用; 即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。 首先考虑如何将两个有序数组合并,这个只需要比较两个数组的s谁小先将谁放入新数组,直到是走到末尾; class Te...

2019-01-09 17:03:58

阅读数 114

评论数 0

数据结构-排序-快速排序的优化(三分取中法实现)

优化一:当待排列序列的长度分割到一定大小时,使用插入排序 原因:对于很小和部分有序的数组,快排不如插入排序好。当待排序序列的长度分割到一定大小后,继续使用分割的效率比插入排序要差; 但是三分取中+插入排序还不能处理重复数组; 优化二:聚集相同基准法;处理重复的数组元素 原因:在一次分割结束后,可...

2019-01-09 13:33:28

阅读数 126

评论数 0

数据结构-排序-快速排序之三分取中法

思想:引入的原因:虽然随机选取枢轴时,减少出现不好分割的几率,但是还是最坏情况下还是O(n^2),要缓解这种情况,就引入了三数取中选取枢轴 分析:最佳的划分是将待排序的序列分成等长的子序列,最佳的状态我们可以使用序列的中间的值,也就是第N/2个数。可是,这很难算出来,并且会明显减慢快速排序的速度。...

2019-01-09 12:16:59

阅读数 59

评论数 0

数据结构-排序-快速排序之随机选取基准法

思想:基本的快速排序选取第一个或者最后一个元素作为基准。这样在数组已经有序的情况下,每次划分将得到最坏的结果。一种比较常见的优化方法是随机化算法,即随机选取一个元素作为基准。这种情况下虽然最坏情况仍然是O(n2),但最坏情况不再依赖于输入数据,而是由于随机函数取值不佳。实际上,随机化快速排序得到理...

2019-01-09 11:56:27

阅读数 449

评论数 0

随笔-实现strStr() (找到字符串子串)

题目: 实现 strStr() 函数。 给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。 示例 1: 输入: haystack = “hello”, needle =...

2018-12-23 14:55:54

阅读数 88

评论数 0

数据结构-排序-快速排序之固定位置选取基准法(递归/非递归)

思想:均匀的分割待排序序列 :选取一个基准par,定义两个指针 low high 一般基准选取low下标的值;如果high下标的值比par大,high–;反之将high的值放到low 下标; low的操作和high 一样 ;当high和low 相遇时,将par放到low角标,此时,左边全是比...

2018-12-13 19:56:26

阅读数 76

评论数 0

随笔-判断一个链表是否为回文链表

问题:请判断一个链表是否为回文链表。 示例 1: 输入: 1->2 输出: false 示例 2: 输入: 1->2->2->1 输出: true class Solution { public boo...

2018-12-11 16:03:35

阅读数 77

评论数 0

随笔-设计循环队列

问题: 设计你的循环队列实现。 循环队列是一种线性数据结构,其操作表现基于 FIFO(先进先出)原则并且队尾被连接在队首之后以形成一个循环。它也被称为“环形缓冲器”。 循环队列的一个好处是我们可以利用这个队列之前用过的空间。在一个普通队列里,一旦一个队列满了,我们就不能插入下一个元素,即使在队列前...

2018-12-11 11:03:28

阅读数 43

评论数 0

随笔-KMP算法解决主串(s2)里面有几个子串(s1)

时间复杂度O(n+m) 问题:s1=“asc” s2=“ababcdd” 思路:KMP不再多说,如果查找到,那就返回的下标+1继续找 public class{ public static int [] next(String sub,int [] next){ ...

2018-12-10 20:12:51

阅读数 84

评论数 0

数据结构-串-KMP算法

时间复杂度:o(m+n) 需求:解决字符串是否包含字符字串的问题; 思路:定义一个主串的指针i 字串的指针j 当i和j下标的字符相同,i++;j++; 当不同时,从j=0开始找以j-1下标字符结尾的字符真子串,其长度为len, 与j-1下标开始回退len长度的字符真子串进行比较,如相同j=len...

2018-12-10 16:36:10

阅读数 333

评论数 0

数据结构-串- BF(朴素)算法

时间复杂度: O(nm) ; 需求:解决字符串主串是否包含子串的问题; 思路:采用双指针;主串i 字串 j 当i与j相同时 i++,j++,如不同,j=0; i回退上次开始比较的的位置+1 匹配成功返回第一个字符的下标; class BF{ public static ...

2018-12-10 13:59:08

阅读数 30

评论数 0

随笔-(基本类型/泛型)两个栈实现一个队列

问题:两个栈实现一个队列 思路:栈是先进后出,队列是先进先出,固定栈1为入对,栈2为出对;需要出队时,如果栈二为空,就把栈1元素导入栈二,然后出队,不为空直接出栈二元素; 基本数据类型实现 public class QueueDemo { public static void pushQ...

2018-12-10 11:47:31

阅读数 83

评论数 0

随笔-两个队列实现一个栈

问题:两个队列实现一个栈 思路:队列是先进先出,栈是先进后出。如果要pop栈顶元素,那么需要pop的队列中只能有一个元素,那就需要将其余的元素pop到另一个队列当中;也就是说,队列当中需要保持一个队列为空; class Queue{ private int front; //要出...

2018-12-10 11:29:00

阅读数 25

评论数 0

提示
确定要删除当前文章?
取消 删除