算法
CasinX
这个作者很懒,什么都没留下…
展开
-
KMP的next函数
今天花了半天的时间,终于把KMP算法中的next函数整明白了先看看next数据值的求解方法位序 1 2 3 4 5 6 7 8模式串 a b a a b c a cnext值 0 1 1 2 2 3 1 2next数转载 2014-02-19 09:04:45 · 1245 阅读 · 0 评论 -
LeetCode-Binary Tree Postorder Traversal
题目不用多说,就是二叉树的后序遍历。如果是递归进行遍历,相信大家是都会的。这里说下用栈进行遍历的大体思路及代码:思路与前序遍历不同,如果用栈实现后序遍历,当遍历完某个子树后,需要判断之前遍历的是左子树还是右子树。如果是左子树,则要再遍历右子树。如果刚遍历的是右子树,则要访问根节点,并出栈。代码public class Solution { public List<Integer> posto原创 2015-07-27 10:16:12 · 412 阅读 · 0 评论 -
Bloom Filter
Bloom Filter概念和原理焦萌 2007年1月27日 Bloom Filter是一种空间效率很高的随机数据结构,它利用位数组很简洁地表示一个集合,并能判断一个元素是否属于这个集合。Bloom Filter的这种高效是有一定代价的:在判断一个元素是否属于某个集合时,有可能会把不属于这个集合的元素误认为属于这个集合(false positive)。因此,Bloom Filter转载 2015-07-14 08:53:15 · 439 阅读 · 0 评论 -
LeetCode-Combination Sum
问题Given a set of candidate numbers (C) and a target number (T), find all unique combinations in C where the candidate numbers sums to T.The same repeated number may be chosen from C unlimited number of原创 2015-07-14 22:01:06 · 699 阅读 · 0 评论 -
原地归并排序
原地归并排序所利用的核心思想便是“反转内存”的变体,即“交换两段相邻内存块”,对于反转内存的相关文章,曾在文章“关于反转字符串(Reverse Words)的思考及三种解法”中对一道面试题做了分析。这一思想用到的地方很多,在《编程珠玑》中被称为“手摇算法”。通过手摇算法的交换内存的思想来进行原地归并又有不少变种,我们举例分析一种比较常见的情况,不同的方法还有基于二分查找的方法来确定交换的内存块转载 2015-08-23 21:22:16 · 522 阅读 · 0 评论 -
LeetCode--Majority Element II & 多数投票算法
题目 Given an integer array of size n, find all elements that appear more than ⌊ n/3 ⌋ times. The algorithm should run in linear time and in O(1) space.相似题目及多数投票算法第一眼看到这个题,相信许多人都恩给你联想到另一个题目: 给原创 2015-07-17 10:49:27 · 1704 阅读 · 0 评论 -
找出重复3遍的数
题目描述在整型数组中,有一个数重复出现了3遍,其他数重复出现了2遍,找出这个重复3遍的数。要求用O(1)的空间和至多O(nlogn)的空间复杂度。思路1比较简单的思路就是用排序,符合题目要求的可以用堆排序,然后顺序扫描一遍就可以了,这里不再说明。思路2由于其他数都出现了偶数遍,我们需要的数出现了奇数遍,而出现偶数遍的数是我们不需要的,可以借助异或的性质,即两个相同的数异或为0某个数异或0仍为子集原创 2015-08-24 16:35:10 · 943 阅读 · 0 评论 -
转载-二分查找(附感悟)
/* binsearch 寻找key下标,不存在 return -1 */ /* binsearch 注意点【找不到 vs 死循环】 * 1. left <= right 如改为 left < right 可能找不到key * 例如 1 2 3 4 5;key=5; left==right时候才搜到key * 2. left = mid + 1; * 如上left改为=mid转载 2015-08-11 16:47:22 · 578 阅读 · 0 评论 -
在排序的数组中交换两个元素
如题,在一串已经排序好的数中,交换了两个元素。例如:nums[] = {1,2,3,4,5,6,7,8,9,10}交换两个元素(例如交换数字5和9)后:nums[] = {1,2,3,4,9,6,7,8,5,10} 问题是怎么在数组中找到这两个元素?思路假设交换的两个元素为x和y,且x < y。其他的数为Ni。那么问题可以表示为:nums[] = {N1 , N2 , N3 , Ni , x原创 2015-07-23 09:31:23 · 2956 阅读 · 1 评论 -
['LeetCode']表达式求值
Eval Expression(栈)表达式求值是指给定一个表达式字符串,求得表达式最后的值。 例如给定表达式: 3 + 2 * (4 + 1) ,通过表达式求值后得到的值为13。这里之所以写LeetCode是因为做LC中题目时碰到类似题目,所以把这个通用问题写一写以作记录。解决方法(使用栈求值):这里只介绍使用栈的版本,其他方法还有待发掘。其实解决思路是挺明确的,大体是用两个栈分别存储操作符和操作原创 2015-06-30 14:55:56 · 3433 阅读 · 0 评论 -
链表的相交、环问题
链表的基础问题:给定一个链表,返回倒数第K个数。 这里链表的定义如下:package linkedlist;public class ListNode { int data; ListNode next; public static ListNode buildList(int[] array){ ListNode head = new ListNode(); head原创 2014-02-24 18:58:57 · 818 阅读 · 0 评论 -
社会名流问题的解答----算法引论学习
算法设计思想----归纳法1、问题描述:社会名流是指在n个人中,一个被所有人知道但是不知道其他人的人。若用有向图描述此问题,可以表示为:若A认识B,则从A到B有一条边。问题需要从n个人中,找到社会名流。 (在图中,由于C不原创 2014-03-24 21:25:02 · 4715 阅读 · 0 评论 -
弗罗莱(fleury)算法-欧拉回路生成算法
弗罗莱算法是生成欧拉回路的算法之一,今天在原创 2014-04-08 22:57:34 · 11610 阅读 · 2 评论 -
LeetCode--------Sort List
LeetCode上的Sort List题目:题目的意思很简单:将一个链表以O(nlogn)的时间复杂度排好序,并且使用常数空间。关于排序算法的选择:这里我犯了个错误,就是将快速排序的时间复杂度记成了O(nlogn)。。。。(由于对快速排序比较熟悉-,-!)。但是实际情况是如果主元选择不当,最坏的情况会达到O(n2)。而且LeetCode上好像也特意针对快排做了测试用例,所以用快排会原创 2014-11-29 00:39:31 · 576 阅读 · 0 评论 -
LeetCode------Container With Most Water
原题是这样的:Given n non-negative integers a1, a2, ..., an, where each represents a point at coordinate (i, ai). n vertical lines are drawn such that the two endpoints of line i is at (i, ai) and (i原创 2014-11-29 11:30:42 · 578 阅读 · 0 评论 -
[LeetCode]Excel Sheet Column Title
原题:Given a positive integer, return its corresponding column title as appear in an Excel sheet.For example: 1 -> A 2 -> B 3 -> C ... 26 -> Z 27 -> AA 28 -> AB 思路:原创 2014-12-22 19:36:56 · 657 阅读 · 0 评论 -
LeetCode----Sudoku Solver+精确覆盖问题解法(Dancing Links)
BackGround: 做完LeetCode上的数独题目好长时间了,今天将做题时参考的Algorithm X 以及 Dancing Links 整理出来。话说理解算法+写出程序一共用了三天,智商果然余额不足。。。介绍: 由于Dancing Links 是为了解决数独问题学习的,那就从数独问题下手,围绕数独问题展开对Algorithm X 和 Dancing Link原创 2014-12-10 16:09:27 · 3155 阅读 · 0 评论 -
[LeetCode]Divide Two Integers
Divide two integers without using multiplication, division and mod operator.If it is overflow, return MAX_INT.题意明显,不让用乘除和取余操作符,完成除法操作。思路一:一个一个加除数,直到满足条件。-------------------明显TLE了。借鉴别人的原创 2014-12-12 16:45:20 · 535 阅读 · 0 评论 -
最长公共字串与公共子序列
这两个问题都可以用动态规划做,由于比较相似,所以经常混淆。在这里把思路写一写,防止以后出错。定义上的区别最长公共字串,字串是指连续的序列,也就是中间不能有隔开。而子序列则可以不是连续的,只要保持相对位置的正确即可。例如给两个字符串:abcde 和acde ,两个字符串的最长公共字串是cde , 而最长公共子序列是acde 。动态规划方法的区别仍然以两个字符串s1 = abcde 和 s2 = acd转载 2015-08-14 18:39:29 · 502 阅读 · 0 评论