说明 本文给出杨辉三角的几种C语言实现,并简要分析典型方法的复杂度。
本文假定读者具备二项式定理、排列组合、求和等方面的数学知识。一 基本概念
杨辉三角,又称贾宪三角、帕斯卡三角,是二项式系数在三角形中的一种几何排列。此处引用维基百科上的一张动态图以直观说明(原文链接http://zh.wik...
分类:
编程语言 时间:
2014-06-29 12:07:25
阅读次数:
328
一直以来,对排序都不太感冒,能立马写出来的排序恐怕就只有冒泡排序了,但是我又深知排序算法还是挺重要的然后,就不得不研究一下,那首先拿快速排序来开刀吧我们先不管排序的复杂度什么的,直入主题题目:对数列
4 6 9 3 2 8 5 1 用快速排序首先抽出一个数字(可以是这个数列中的任何一个)抽取第一个吧...
分类:
其他好文 时间:
2014-06-29 07:51:26
阅读次数:
245
昨天做了leetcode里的 Longest Palindromic Substring ,一开始用动态规划O(N^2),不管怎么改都超时了。。。于是在大神的帮助下,找到了传说中的Manacher算法,居然能在O(n)内求出来,瞬间给跪了。
本屌认为,这个算法主要是充分的利用了以前的匹配的结果,来起到了降低时间复杂度的作用,这点跟KMP算是有点类似。在预处理时有个小技巧就是将第0,1为设...
分类:
其他好文 时间:
2014-06-20 12:15:22
阅读次数:
305
以下各题均有时间复杂度为O(n*n)或以空间换取时间使得时间空间复杂度为O(n)的算法,在此均不考虑。
问题一、字符串移动
字符串为*号和26个字母的任意组合,把*号都移动到最左侧,把字母移到最右侧并保持相对顺序不变,要求时间和空间复杂度最小 。如“afdg**fa**hjfkdsl”变换成“****afdgfahjfkdsl”
此题前后字符串的长度...
分类:
其他好文 时间:
2014-06-20 10:49:56
阅读次数:
296
一、插入排序1.直接插入排序算法稳定,时间复杂度为O(n^2),空间移动复杂度为O(n2)如果序列是有序的,最好的时间复杂度为O(n)void
insertSort(int data[],int n){ for(int i=1;i=0&&data[j]>temp) { d...
分类:
其他好文 时间:
2014-06-11 12:53:06
阅读次数:
266
最简单的方法是将n个元素排序,取出最小的k个元素。这个算法的时间复杂度为
O(nlgn)。然而在输入的n个元素互异的情况下,利用最大堆,我们可以获得时间复杂度为 O(nlgk)的算法。 1 #include 2 3 #define N
128 4 5 int heap[N], max_s...
分类:
其他好文 时间:
2014-06-11 10:49:23
阅读次数:
220
第一种方法,用栈实现,最容易想到,也比较容易实现,每次碰到‘)’时update
max_len,由于要保存之前的‘(’的index,所以spacecomplexity 是O(n) 1 // 使用栈,时间复杂度 O(n),空间复杂度 O(n)
2 class Solution { 3 publ...
分类:
其他好文 时间:
2014-06-11 09:16:10
阅读次数:
197
常用的排序算法有冒泡排序,插入排序和选择排序。他们的时间复杂度是o(n²),与数据量的平方成正比。他们的效率还是比较低的。现在来说说他们的效率为什么比较低下。以冒泡排序为例,它每一轮都是与相邻的元素进行交换,交换的距离为1,每次每个(没有冒泡出来的)元素都要与前一个比较再交换。每次相邻的比较只能比较出两个元素的大小,不能以整个数组进行参照来确定在整个数组里的大小,也就是说每次的比较不能确定其他元素...
分类:
其他好文 时间:
2014-06-07 16:16:01
阅读次数:
172
最长回文字串,相信做过Palindrome Partitioning II 这个题的同学应该可以很快做出来。没错,这个题还可以使用动态规划方法得到一个时间复杂度为O(n^2)的解法,当然如果你想要更好的时间复杂度的算法也是有的。好的,我们先来看看时间复杂度为O(n^2)的算法。
代码实现--动态规划O(n^2)
相信如果你在网上看过了别人的算法,你会发现我的算法是最简洁的。哈哈,这个题需要注意的是如果你用惯了vector的话,你这里肯定会得到超时的提示...
...代码二--复杂度为O(n)的算法...
分类:
其他好文 时间:
2014-06-07 12:08:43
阅读次数:
224
skiplist介绍跳表(skip
List)是一种随机化的数据结构,基于并联的链表,实现简单,插入、删除、查找的复杂度均为O(logN)。跳表的具体定义,跳表是由William
Pugh发明的,这位确实是个大牛,搞出一些很不错的东西。简单说来跳表也是链表的一种,只不过它在链表的基础上增加了跳跃功能...
分类:
其他好文 时间:
2014-06-07 07:18:01
阅读次数:
239