在图论中,由一个有向无环图的顶点组成的序列,当且仅当满足下列条件时,称为该图的一个拓扑排序(Topological sorting)。
1)每个顶点出现且只出现一次;
2)若A在序列中排在B的前面,则在图中不存在从B到A的路径。
也可以定义为:拓扑排序是对有向无环图的顶点的一种排序,它使得如果存在一条从顶点A到顶点B的路径,那么在排序中B出现在A的后面。 什么地方会用到拓扑排序呢?比...
分类:
编程语言 时间:
2015-07-12 09:41:34
阅读次数:
187
题意:数组中每个数字都出现了两次,只有一个出现一次,找出这个数思路:很明显不能从头到位遍历来找,首先是超时的原因,再次就是这样很没意思·····但是却没想到什么好办法,因为不了解按位异或(XOR)。异或就是相同的两个数结果为0,不同的为1。根据交换律我们知道,数组中两两异或的结果就剩最后那一个落单的...
分类:
其他好文 时间:
2015-07-11 11:54:07
阅读次数:
91
void FindNumsAppearOnce(int data[], int length, int* num1, int* num2)
{
if (data == NULL || length
return;
int resultExclusiveOR = 0;
for (int i = 0; i
resultExclusiveOR ^= data[i];
unsigned ...
分类:
编程语言 时间:
2015-07-11 09:18:58
阅读次数:
251
char FirstNotRepeatingChar(char* pString)
{
if (pString == NULL)
return '\0';
const int tableSize = 256;
unsigned int hashTable[tableSize];
for (unsigned int i = 0; i
hashTable[i] = 0;
char* ...
分类:
其他好文 时间:
2015-07-10 16:40:59
阅读次数:
106
要快速在一段子序列中判断一个元素是否只出现一次 , 我们可以预处理出每个元素左边和右边最近的相同元素的位置 , 这样就可以 O( 1 ) 判断.考虑一段序列 [ l , r ] , 假如我们找到了序列中唯一元素的位置 p , 那我们只需检查 [ l , p - 1 ] & [ p + 1 , r ]...
分类:
其他好文 时间:
2015-07-09 12:50:18
阅读次数:
125
Select 对象Select 对象代表 HTML 表单中的一个下拉列表。在 HTML 表单中, 标签每出现一次,一个 Select 对象就会被创建。您可通过遍历表单的 elements[] 数组来访问某个 Select 对象,或者使用 document.getElementById()。IE:In...
分类:
Web程序 时间:
2015-07-08 12:41:28
阅读次数:
142
// 第一个只出现一次的字符题目:在字符串中找出第一个只出现一次的字符。
// 如输入“abaccdeff”,则输出’b’。
#include
#include
char find_one(char *str)
{
int a[256];
int len = strlen(str);
int i = 0;
memset(a, 0, sizeof(a));
for (i...
分类:
编程语言 时间:
2015-07-06 23:32:36
阅读次数:
156
解题思路: 关键:怎样确定出现一个新单词 方法:从第一个字符逐个进行检查,判断此字符是否为新单词的开头,如果是num+1,最后num的值就是单词总数判断是否出现新单词,可以由是否由空格出现来决定(连续若干个空格作为出现一次空格,一行的开头空格不统计在内),若出现某个字符为非空格,而它前面的字符是空格,则表示新单词开始,此时num+1,如果当前字符为非空格,前面的字符也是非空格,则表示还是原来的单词...
分类:
其他好文 时间:
2015-07-06 19:50:17
阅读次数:
85
//在字符串中找出第一个只出现一次的字符。如输入“abaccdeff”,则输出’b’
#include
#include
char OneTime(char * str)
{
int data[256];
char *p = str;
if (*p == '\0')
return '\0';
memset(data, 0, sizeof(data));
while (*p )
...
分类:
编程语言 时间:
2015-07-06 17:56:37
阅读次数:
128
题目:一个整型数组里除了两个数字之外,其他的数字都出现了两次,请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。我们想到异或运算的一个性质:任何一个数字异或它自己都等于0。也就是说, 如果我们从头到尾依次异或数组中的每一个数字,那么最终的结果刚好是那个只出现一次的数字,因为那些成对出现两次的数字全部在异或中抵消了。...
分类:
编程语言 时间:
2015-07-06 12:21:17
阅读次数:
139