查找算法
qiki_tang
不积硅步无以至千里,突破自己,糖没味儿加油!
展开
-
字符串匹配--sunday算法
1、sunday算法原理 在匹配过程中,文本串首先按从左向右进行逐个匹配,当发现有不匹配的字符时,当前匹配的位置就跳过尽可能大的步长,再进行下一轮的匹配,从而达到提高匹配效率的目的。Sunday算法匹配失败时,判断文本串中参加匹配的最末位字符的下一位字符是否在模式串中出现。如果未出现,跳转步长为模式串长度加1;如果出现,其跳转步长为模式串中最右端的该字符到末尾的距离加1。文本串:su...原创 2018-02-26 23:23:58 · 349 阅读 · 0 评论 -
40-找数组中只出现奇数次的n个数字(n=1,2)
一、题目描述题目一:一个整型数组里除了1个数字之外,其他的数字都出现了偶数次,找出这个数字,要求时间复杂度O(n),空间复杂度O(1)题目二:一个整型数组里除了2个数字之外,其他的数字都出现了偶数次,找出这两个数字,要求时间复杂度O(n),空间复杂度O(1)二、解题思路题目一:异或运算,偶数个一样的数异或为0,异或符合交换律,所以只需要把所有数组中所有数字异或一次就可以了题目二:整...原创 2018-08-07 21:24:04 · 608 阅读 · 0 评论 -
从排序数组中删除重复子项-保留2次(可拓展)
一、题目描述给定一个有序数组,删除重复的地方,使每个元素只出现不多于两次,并返回新的长度。不要为其他数组分配额外的空间,您必须使用常量内存来完成此操作。例如,给定输入数组A = [1,1,1,2,2,3],你的函数应该返回length = 2,现在A是[1,1,2,2,3]。二、解题思路当第一次出现array[index]==array[i]的情况时,包容它能像array[index]!=arra...原创 2018-07-08 11:42:14 · 285 阅读 · 0 评论 -
两个排序数组中找第k大的数
一、题目描述给定两个已经排序好的数组,找到两者所有元素中第k大的元素二、解法分析解法一:参照归并排序 将两个有序数组变成一个有序数组:merge两个数组,然后求第k大的数,时间复杂度O(m+n)解法二:游标计数 题目只要求第k大的数,没必要花力气将数组全部再排序,可以定义两个游标分别指向两个有序数组,按序移动,并用count计数,当count等于k时,返回两个游标指向的数中最小的那一个...原创 2018-07-08 11:32:18 · 9890 阅读 · 4 评论 -
两个排序数组中找第k大的数
一、问题给定两个已经排序好的数组,找到两者所有元素中第k大的元素二、解法一:merge--将两个有序数组变成一个有序数组时间复杂度O(m+n),空间复杂度O(m+n)/*************************************************给定两个已经排序好的数组,找到两者所有元素中第k大的元素Author:tmwdate:2018-3-25***********...原创 2018-03-25 15:22:22 · 3688 阅读 · 3 评论 -
【二分查找】原型和变种以及相关思考
一、写在前面的话笔者在面一家非常NB的互联网公司时,面到了二分查找的变种题,回来后对这个看似简单的二分查找做了深入的思考,可能也不算深入,但至少比之前是更加领教了它的厉害。每一次面试都会带来不一样的思维启迪,面完这家公司带给我最大的启迪就是学算法不止学它本身,应该看到它的边界和可扩展性,经常想想这些好的经典算法,让它融入到自己潜意识里,才算真正掌握。话不多说,开始上干货。二、二分查找原型...原创 2018-09-07 08:50:50 · 822 阅读 · 0 评论 -
29-出现次数超过一半的数的查找
【题目描述】 数组中有一个数出现的次数超过了数组长度的一半,找出这个数【解题方法】1、若数组有序: 方法:可直接输出数组n/2位置上的元素即可2、若数组无序 方法一:排序 采用快速排序,将无序数组变成有序数组,再输出n/2位置上的元素即可,复杂度为O(nlogn); 方法二:哈希表 1)根据题目需求,可设计出哈希表的数据结构(两个int,...原创 2018-02-25 21:54:17 · 1293 阅读 · 0 评论 -
【哈希表】散列表查找--避免冲突的两种解决方法程序实现
C语言哈希表--避免冲突的两种解决方法程序实现【一些概念】1、散列函数--哈希函数存储位置 = f(关键字)散列技术是在记录的存储位置和它的关键字之间建立一个确定的对应关系f,使得每个关键字key对应一个存储位置f(key)。查找时,可根据这个确定的对应关系找到给定值key的映射f(key),即,若查找集合中存在这个记录,则必定在f(key)的位置上。f就是散列函数(即哈希函数)2、散列表--哈希...原创 2017-10-31 10:08:45 · 7646 阅读 · 2 评论 -
【二叉排序树】--无序表查找、插入、删除
【二叉排序树】[概念]二叉排序树,它或者是一棵空树,或者是具有下列性质的二叉树1)当它的左子树不空,则左子树上所有结点的值均小于它根结构的值2)当它的右子树不空,则右子树上所有结点的值均大于它根结构的值3)二叉排序树的左、右子树也分别为排序树一、查找构造一棵二叉排序树的目的不是为了排序,而是为了方便插入和删除操作二叉排序树经过中序遍历后就是一个有序序列二、插入...原创 2017-10-24 20:55:35 · 696 阅读 · 2 评论 -
【插值查找】--有序表的查找
一、插值查找前提 1、顺序存储 2、有序(升序或降序)二、算法思想 插值查找的思想,只不过它的middle值不是middle = ( low + high ) / 2 = low + (1/2)*(high - low); 而变成了:middle = low + (high - low) * [(key - a[low])/(a[high] - a[low])]三、算法复...原创 2018-03-11 09:58:58 · 258 阅读 · 0 评论 -
行列递增矩阵的查找
一、问题描述 在一个m行n列的二维数组中,每一行都按照从左到右递增的顺序排列,每一列都按照从上到下递增的顺序排列。现输入这样的一个二维数组和一个整数,请完成一个函数,判断数组中是否含有该整数key。例如给定如下所示二维数组,它的每一行每一列都递增排序。如果在这个数组中查找数6,则返回true,如果查找数5,则返回false1 2 8 92 4 9 124 ...原创 2018-02-23 22:00:25 · 477 阅读 · 0 评论 -
【二分查找】--有序表的查找
一、问题描述给定一个排好序的数组,查找某个数是否在这个数组中二、解题思路由于数组是有序的,因而可考虑二分查找,注意避免mid值溢出情况即可三、算法复杂度:O(logn)四、代码实现/***********************************************Author:tmwdate:2018-2-23***********************************...原创 2018-02-23 21:57:42 · 1307 阅读 · 0 评论 -
字符串匹配--Hospoll算法
一、Hospoll算法原理 参考文章:http://blog.csdn.net/jjdiaries/article/details/12771439 本人就不废话了二、Hospoll算法规则: 字符串后移位数 = 失配字符位置 - 失配字符上一次出现的位置三、在写代码之前需要明白1、模式串是从右向左进行匹配,匹配过程中,模式串实际上是从左往右做整体挪动2、对模式串的操作...原创 2018-02-27 17:49:49 · 723 阅读 · 0 评论 -
41-找和为sum的连续正数序列
一、题目描述输入一个正数sum,打印出所有和为sum的连续正数序列(至少含有两个数),例如输入15,由于1+2+3+4+5=4+5+6=7+8,所以结果打印出三个连续序列1~5、4~6和7~8二、解题思路该题的特殊点在于,找的是一个递增的连续序列,基本思路如下:1)设定两个参数small和big用于分别表示最小值和最大值,根据题目的特点,将small初始化为1,big初始化为22)...原创 2018-08-07 22:35:43 · 290 阅读 · 0 评论