Charles
Thinking low level, Coding high level
C++博客
首頁
新隨筆
聯系
聚合
管理
posts - 71, comments - 41, trackbacks - 0
尋找最長遞增子序列
注意,不一定連續遞增
template
<
class
?T
>
?
int
?FindLIS(T?
*
arr,?
int
?len,?T?
*&
result)
{
????
int
?
*
last?
=
?
new
?
int
[len]();
????
int
?
*
track?
=
?
new
?
int
[len]();
????
int
?left,?right,?mid;
????
int
?iCurrMaxLen?
=
?
0
;
????
if
?(len?
<
?
1
)
????
{
????????result?
=
?
0
;
????????
return
?
0
;
????}
????result?
=
?
0
;
????last[
0
]?
=
?
0
;
????
for
?(
int
?i?
=
?
1
;?i?
<
?len;?i
++
)?
????
{
????????
if
?(arr[last[iCurrMaxLen]]?
<
?arr[i])
????????
{
????????????track[i]?
=
?last[iCurrMaxLen];
????????????last[
++
iCurrMaxLen]?
=
?i;
????????????
continue
;
????????}
????????left?
=
?
0
;
????????right?
=
?iCurrMaxLen;
????????
while
?(left?
<
?right)
????????
{
????????????mid?
=
?(left?
+
?right)?
/
?
2
;
????????????arr[last[mid]]?
<
?arr[i]?
?
?left?
=
?mid?
+
?
1
?:?right?
=
?mid;
????????}
????????
if
?(
/**/
/*
left?<=?right?&&?
*/
arr[i]?
<
?arr[last[left]])?
????????
{
????????????
if
?(left?
>
?
0
)?
????????????????track[i]?
=
?last[left?
-
?
1
];
????????????last[left]?
=
?i;
????????}
????}
//
for
????
for
?(left?
=
?iCurrMaxLen,?right?
=
?last[iCurrMaxLen];?left?
>=
?
0
;?left
--
,?right?
=
?track[right])
????????last[left]?
=
?arr[right];
????
if
?(track)
????
{
????????delete?[]?track;
????????track?
=
?
0
;
????}
????result?
=
?last;
????last?
=
?
0
;
????
return
?iCurrMaxLen?
+
?
1
;
}
稍微解釋一下,last中存的是所有i長度子序列中last[i]最小的那個值。而track中記錄它的前一個值。這樣可以沿著track找回去。
posted on 2006-11-22 17:50
Charles
閱讀(1497)
評論(2)
編輯
收藏
引用
所屬分類:
面試小算法
FeedBack:
#
re: 尋找最長遞增子序列
2006-11-28 11:58 |
踏雪赤兔
寫得有點復雜,可以用STL簡化代碼。不過看得出,還是O(NlogN)的算法
回復
更多評論
#
re: 尋找最長遞增子序列
2006-11-28 16:18 |
Charles
呵呵,因為這是準備面試用的,所以不能寫成STL版的
回復
更多評論
刷新評論列表
只有注冊用戶
登錄
后才能發表評論。
【推薦】100%開源!大型工業跨平臺軟件C++源碼提供,建模,組態!
相關文章:
Integer Partition
數1的個數
Fibonacci
簡單打印內存的小玩意兒
矩陣式螺旋輸出
求最大公約數與最小公倍數
數內置類型的bit數
計算Int最大最小值
兩個堆棧模擬一個隊列
檢測補碼表示
網站導航:
博客園
IT新聞
BlogJava
博問
Chat2DB
管理
Copyright ©2025 Charles Powered By:
博客園
模板提供:
滬江博客
<
2006年11月
>
日
一
二
三
四
五
六
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
6
7
8
9
決定開始寫工作日記,記錄一下自己的軌跡...
常用鏈接
我的隨筆
我的評論
我參與的隨筆
留言簿
(4)
給我留言
查看公開留言
查看私人留言
隨筆分類
(70)
Helper Utility(1)
讀書作筆記(3)
發泄(3)
面試小算法(27)
拿來主義(25)
隨筆(10)
一般人兒我不告訴他(1)
隨筆檔案
(71)
2008年3月 (1)
2008年2月 (1)
2007年7月 (3)
2007年3月 (3)
2007年1月 (18)
2006年12月 (16)
2006年11月 (29)
charles推薦訪問
Code Project
Linux Journal
Linux man pages
Single UNIX Specification
電子書1
電子書2
電子書3
搜索
積分與排名
積分 - 50789
排名 - 448
最新評論
1.?re: 簡單打印內存的小玩意兒
不錯
--dddd
2.?re: 尋找最長連續遞增子序列
這個只能算是方法,效率太低了
--大物
3.?re: 數單詞數
規范化;門口麻煩機;那么孔方兄那么媽媽法;釀母菌法那么;風格那么明年;憤怒麻煩那么憤怒憤怒留念多孔蕈樂觀好看的里邊趕快巴拿馬城,新年巴拿馬國際法,不
--申訴臺
4.?re: 數單詞數
感到發現看來自動化大會單行本打開怎么趕快電子管矛盾感動不動門口‘大批看病黃道婆民主
--申訴臺
5.?re: 移除字符
評論內容較長,點擊標題查看
--D_BOY
閱讀排行榜
1.?求最大公約數與最小公倍數(3516)
2.?COFF格式續篇—Lib文件的結構zz(2256)
3.?計算Int最大最小值(2144)
4.?IA32/Windows&Linux高精度計時器(1750)
5.?尋找最長遞增子序列(1497)
評論排行榜
1.?計算Int最大最小值(5)
2.?IA32/Windows&Linux高精度計時器(4)
3.?兩個堆棧模擬一個隊列(3)
4.?ZMD(3)
5.?數單詞數(3)
日日狠狠久久偷偷色综合96蜜桃
|
久久99精品国产麻豆蜜芽
|
精品久久久久久无码中文野结衣
|
久久se精品一区精品二区
|
久久久久国产一区二区
|
久久99国产精品久久99
|
久久久人妻精品无码一区
|
波多野结衣AV无码久久一区
|
久久综合给合久久国产免费
|
国内精品伊人久久久久影院对白
|
久久亚洲精品无码观看不卡
|
久久久免费精品re6
|
久久亚洲sm情趣捆绑调教
|
成人国内精品久久久久影院VR
|
久久99国内精品自在现线
|
久久久久99这里有精品10
|
久久精品国产精品亚洲毛片
|
激情久久久久久久久久
|
久久精品国产亚洲AV嫖农村妇女
|
精品乱码久久久久久夜夜嗨
|
久久久这里有精品
|
国产精品无码久久综合网
|
精品熟女少妇a∨免费久久
|
午夜精品久久久久久影视777
|
久久久久久综合一区中文字幕
|
国产精品美女久久久久网
|
国产精品毛片久久久久久久
|
久久久久国产精品人妻
|
麻豆亚洲AV永久无码精品久久
|
人妻无码精品久久亚瑟影视
|
久久九九久精品国产免费直播
|
香蕉久久夜色精品国产小说
|
国产精品综合久久第一页
|
99久久精品影院老鸭窝
|
91精品国产高清91久久久久久
|
日韩人妻无码精品久久免费一
|
日韩欧美亚洲综合久久影院Ds
|
999久久久国产精品
|
国产精品成人久久久久三级午夜电影
|
国产激情久久久久久熟女老人
|
欧美精品一区二区久久
|