摘要: 最长递增子序列Longest Increasing Subsequence (LIS)指一个序列中所包含的最长的递增子序列。例如, 序列{2, 1, 4, 2, 3, 7, 4, 6}的LIS是{1, 2, 3, 4, 6},其长度为5。写一函数计算一个序列中的最长子序列长度。一般思路:使用动态规划,数组记为a[],用f[i]表示从第0个元素到第i个元素的LIS长度(初始化为1,因为a[i]本身长度为1),对于每一个i,需要和i以前的元素进行比较,并更新f[i]的值,即比较a[i]和a[j],0 <= j < i。状态转移方程为f[i] = max{f[i], f[j]+1, if 阅读全文
posted @ 2013-03-29 13:47 hust_枫 阅读(257) 评论(0) 推荐(0) 编辑
摘要: 题目描述:编写一个高效函数,找到字符串中首个非重复字符。如"total"首个非重复字符为'o',"teeter"为'r'。(时间复杂度最好为O(N))思路:字符串仅限于使用ASCII码,可以用一数组来存放各个字符出现的次数,然后按字符串顺序找出首个次数为1的字符,并打印出来。时间复杂度:遍历字符串O(N),找出首个次数为1 的字符最坏情况O(N),故总的时间复杂度O(N);代码如下View Code 1 #include<stdio.h> 2 //找字符串中首个非重复字符,如"total"首 阅读全文
posted @ 2013-03-29 10:01 hust_枫 阅读(517) 评论(0) 推荐(0) 编辑