- 博客(22)
- 资源 (10)
- 收藏
- 关注
原创 模式匹配
模式匹配欢迎转载,转载请注明与原文链接:1.BF(Brute Force)算法BF(Brute Force)算法是普通的模式匹配算法,BF算法的思想就是将目标串S的第一个字符与模式串T的第一个字符进行匹配,若相等,则继续比较S的第二个字符和 T的第二个字符;若不相等,则比较S的第二个字符和T的第一个字符,依次比较下去,直到得出最后的匹配结果。BF算法是一种蛮力算法。假设目标串S
2015-01-17 16:05:10 904
原创 输出单链表中倒数第k个结点(Java版)
题目:输入带头结点的单链表L,输出该单链表中倒数第k个结点。单链表的倒数第0个结点为该单链表的尾指针。要求只能遍历一次单链表。解题思路:如果不要求只能遍历一次单链表,我们可以先遍历一次单链表,求出它的结点的总个数n(包括头结点),所以单链表的结点是从倒数第n-1个到倒数第0个,然后再遍历一次单链表,遍历时访问的第n-k-1个结点就是该单链表中倒数第k个结点。现在要求只能遍历
2015-01-17 15:40:24 2902
原创 删除单链表某个结点(Java版)
题目:删除带头结点的单链表L中的结点p,p不是最后一个结点,要求时间复杂度为O(1)。解题思路:如果不要求时间复杂度为O(1),我们可以找出p的前驱结点,然后很容易就删除p。现在要求时间复杂度为O(1),因为p不是最后一个结点,知道结点p我们可以删除p的后继结点,那么我们可以把p的后继结点元素的值赋给p结点元素的值。ADT定义://单链表的结点类class LNo
2015-01-17 09:47:59 11409 1
原创 删除单链表中重复的值(Java版)
题目:删除带头结点的单链表中重复值的元素(即让每种值的元素只有一个)解题思路:用一个动态辅助存储数组,每次要向辅助数组中放入元素时,让辅助数组的长度加1,最长时与单链表一样长,设一个指针p,让它指向头结点,从单链表中第一个元素开始,将它的值放入辅助数组中,然后依次访问单链表后面的元素,用该元素的值与数组中所有已经被赋值的元素的值进行比较,如果不等于数组中任何元素的值,那么让p的
2015-01-17 09:31:17 4012
原创 单链表是否相交(Java版)
题目:有两个带头结点的单链表L1,L2,判断它们是否相交(它们中是否有相同的结点)解题思路:L1,L2中任何一个链表为空它们不相交因为单链表中可能有环,所以分3种情况讨论1、L1,L2中都没有环,那么可以通过判断它们中最后一个结点是否相同,来判断它们是否相交2、L1,L2中一个有环,一个没有环,那么它们一定不相交3、L1,L2中都有环,那么只有当它们的环相同时,它们才相
2015-01-16 21:42:17 1054
原创 单链表是否有环(Java版)
题目:判断一个带头结点的单链表L是否有环解题思路:咋看之下,这题还真不好解,于是又一些投机取巧的人,在访问单链表中元素的时候,用一个比较大的数N控制访问元素的个数,他们认为如果在访问到第N个元素之前有一个元素为null,那么单链表没有环,反之,单链表有环。他们的解释是都访问了这么多元素了,还没有一个元素为空,单链表很有可能有环,再加上一般单链表中的元素都不超过N个,所以单链表有环。对于
2015-01-16 21:29:06 5897 1
原创 单链表就地逆置(Java版)
题目:有一个线性表(a1,a2,a3,...,an),采用带头节点的单链表L存储,设计一个算法将其就地逆置,线性表变为(an,...a3,a2,a1)。所谓“就地”指辅助存储空间为O(1)。解题思路:如果是顺序存储的话,我们很容易想到解题思路,利用1个辅助变量让第1个元素与第n个元素交换,然后再利用这个辅助变量让第2个元素与第n-1个元素交换,...最后利用这个辅助变量让第
2015-01-16 15:29:15 10556
原创 在字符串中删除特定的字符
题目:输入两个字符串,从第一字符串中删除第二个字符串中所有的字符。例如,输入”I am lavor_zl.”和”I love you.”,则删除之后的第一个字符串变成”amar_z"。要求相对于第一个字符串的长度n时间复杂度为O(n)。解题思路:用一个bool数组保存是否在第二个字符串中出现的所有字符,数组下标表示字符,这个数组的长度为256,因为C/C++中字符总共有256个。遍历第
2015-01-15 20:13:21 1895
原创 字符串中第一个只出现一次的字符
题目:在一个字符串中找到第一个只出现一次的字符。比如"lavor_zl"第一个只出现一次的字符是'a'。解题思路:C/C++字符使用Ascii编码,一个字符占一个字节即可以表示2的8次方个数,那么C/C++字符可以表示的256个字符,因此可以用一个256的数组来保存各个字符出现的次数,当然256个字符的Ascii值是0-255之间的所有数,而且'\0'的Ascii值0,所以可以用数
2015-01-15 18:17:34 1002
原创 翻转句子中单词的顺序
题目:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。句子中单词以空格符隔开。为简单起见,标点符号和普通字母一样处理。比如输入"I love you.",输出"you. love I"。解题思路:我们可以先翻转整个字符串,然后再翻转字符串中的每个单词。比如"I love you."翻转整个字符串后得到".uoy evol I",再翻转字符串中的每一个单词得到"you.
2015-01-15 15:54:23 1047
原创 回文字符串
题目:判断一个字符串是不是回文字符串,所谓回文字符串,就是指字符串的第i个字符与字符串的第n+1-i个字符相等,i小于等n/2。比如"abcba","abba"都是回文字符串。解题思路:比较字符串第i个字符与字符串的第n+1-i个字符相等,i小于等n/2,如果不相等就返回false,如果循环执行完了还没有返回的话就返回true。算法实现:bool isPalin
2015-01-15 10:50:44 1005
原创 输出单链表中倒数第k个结点
题目:输入带头结点的单链表L,输出该单链表中倒数第k个结点。单链表的倒数第0个结点为该单链表的尾指针。要求只能遍历一次单链表。解题思路:如果不要求只能遍历一次单链表,我们可以先遍历一次单链表,求出它的结点的总个数n(包括头结点),所以单链表的结点是从倒数第n-1个到倒数第0个,然后再遍历一次单链表,遍历时访问的第n-k-1个结点就是该单链表中倒数第k个结点。现在要求只能遍历一次单链
2015-01-15 10:10:54 2041
原创 左旋转字符串
题目:左旋转字符串,定义字符串的左旋转操作:把前面若干个字符移动到尾部。比如把"lavor_zl"左旋转3位得"or_zllav"。要求时间对长度为n的字符串操作复杂度为O(n),辅助内存为O(1)。解题思路:定义一个整型参数count,用它表示旋转的位数,当左旋转的位数大于等于字符串长度时,可以用它除以字符串长度求余来表示旋转的位数,因为左旋转字符串长度的整数倍,字符串保持不变。
2015-01-14 21:31:52 943
原创 字符串转换成整型
题目:将字符串转换成整型,比如输入“123”,输出123。 解题思路:利用每一个0-9数字字符对应的Ascii减去48就得到了一个0-9的整型数字。用前i-1位表示的整型数字乘以10加上第i位表示的数字,就可以得到转换成的整型了。注意字符串第1个字符也可以是+或-。当字符串第1个字符是-时,用前i-1位表示的整型数字乘以10减去第i位表示的数字,就可以得到转换成的整型了。这样的话,
2015-01-14 09:47:44 3609
原创 字符串翻转
题目:将字符串翻转,比如输入"lavor_zl",输出“lz_roval”。解题思路:类似于顺序表的逆置,假设字符串长度为n,那么交换第1个与第n个字符,然后交换第2个和第n-1个字符,类似的交换其他的字符,一共交换n/2次算法实现:void reverseStr(char str[]){ if(str==NULL) return; int n=0;//用n
2015-01-14 09:33:04 1270
原创 删除单链表某个结点
题目:删除带头结点的单链表L中的结点p,p不是最后一个结点,要求时间复杂度为O(1)。解题思路:如果不要求时间复杂度为O(1),我们可以找出p的前驱结点,然后很容易就删除p。现在要求时间复杂度为O(1),因为p不是最后一个结点,知道结点p我们可以删除p的后继结点,那么我们可以把p的后继结点元素的值赋给p结点元素的值。ADT定义如下#define ElemType int
2015-01-13 16:31:45 2559 1
原创 删除单链表中重复的值
题目:删除带头结点的单链表中重复值的元素(即让每种值的元素只有一个)解题思路:用一个动态辅助存储数组,每次要向辅助数组中放入元素时,让辅助数组的长度加1,最长时与单链表一样长,设一个指针p,让它指向头结点,从单链表中第一个元素开始,将它的值放入辅助数组中,然后依次访问单链表后面的元素,用该元素的值与数组中所有已经被赋值的元素的值进行比较,如果不等于数组中任何元素的值,那么让p的ne
2015-01-13 10:54:22 2171
原创 单链表是否相交
题目:有两个带头结点的单链表L1,L2,判断它们是否相交(它们中是否有相同的结点)解题思路:L1,L2中任何一个链表为空它们不相交因为单链表中可能有环,所以分3种情况讨论1、L1,L2中都没有环,那么可以通过判断它们中最后一个结点是否相同,来判断它们是否相交2、L1,L2中一个有环,一个没有环,那么它们一定不相交3、L1,L2中都有环,那么只有当它们的环相同时,它们才相
2015-01-12 16:39:58 887
原创 单链表是否有环
题目:判断一个带头结点的单链表L是否有环解题思路:咋看之下,这题还真不好解,于是又一些投机取巧的人,在访问单链表中元素的时候,用一个比较大的数N控制访问元素的个数,他们认为如果在访问到第N个元素之前有一个元素为null,那么单链表没有环,反之,单链表有环。他们的解释是都访问了这么多元素了,还没有一个元素为空,单链表很有可能有环,再加上一般单链表中的元素都不超过N个,所以单链表有环。对于
2015-01-11 17:14:18 1196
原创 Java多线程
1.线程的创建与启动在Java中,多线程的实现有两种方式:继承java.lang.Thread类实现java.lang.Runnable接口1.1继承Thread类创建线程继承Thread类创建并启动线程的步骤:1、定义Thread的子类,并重写该类的run()方法,run()方法的方法体就表示线程需要完成的任务。run()被称为线程执行体。2、创建Thread的子
2015-01-11 16:21:28 881
原创 单链表就地逆置
题目:有一个线性表(a1,a2,a3,...,an),采用带头节点的单链表L存储,设计一个算法将其就地逆置,线性表变为(an,...a3,a2,a1)。所谓“就地”指辅助存储空间为O(1)。解题思路:如果是顺序存储的话,我们很容易想到解题思路,利用1个辅助变量让第1个元素与第n个元素交换,然后再利用这个辅助变量让第2个元素与第n-1个元素交换,...最后利用这个辅助变量让第n/2个元素与第
2015-01-08 18:14:47 13716 3
原创 Java序列化
1.概述通过序列化机制,我们可以把Java内存中的对象转换成二进制字节流,这样就可以把Java对象存储到磁盘中,或者在网络中传输Java对象。1.1序列化的含义和意义序列化机制允许将实现序列化的Java对象转换成字节序列,这些自己序列可以保存在磁盘上,或通过网络传输,以备以后重新恢复原来的对象。序列化机制使得对象可以脱离程序的运行而单独存在。对象的序列化(Serilize)指将
2015-01-05 15:01:54 1268
一个Activity掌握Design新控件
2016-05-02
一个Activity掌握Android5.0新控件
2016-04-28
一个Activity掌握Android4.0新控件
2016-04-27
Thinking in Java 3th Edition习题及答案
2012-01-10
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人