程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> java實現LIS算法,出操隊形問題,lis隊形

java實現LIS算法,出操隊形問題,lis隊形

編輯:JAVA綜合教程

java實現LIS算法,出操隊形問題,lis隊形


假設有序列:2,1,3,5,求一個最長上升子序列就是2,3,5或者1,3,5,長度都為3。

LIS算法的思想是:

設存在序列a。

① 如果只有一個元素,那麼最長上升子序列的長度為1;

② 如果有兩個元素,那麼如果a[1]>a[0],則最長上升子序列的長度為2,a[1]為該最長上升子序列的最後一個元素;若a[1]<a[0],則最長上升子序列的長度為1,a[0]和a[1]均為  其最長上升子序列的最後一個元素。

③ 如果由三個元素,那麼如果a[2]>a[0],a[2]>a[1],則a[2]可以作為a[0]或者a[1]所在最長上升子序列的最後一個元素。那選擇哪一個序列就要看a[0],a[1]哪個所在的序列要更長。

④ 擴展到n個元素,就是看以a[n]為最後一個元素的最長上升子序列的長度是多少。

 

定義兩個數組,一個是a,一個是b。

a存放原始數據,b[i]存放的是以a[i]結尾的最長上升子序列的長度。

 

代碼如下:

class Lmax{
	
	public static void Lmax(int[] a,int[] b){
		
		b[0]=1;                           
				
		for(int i=1;i<a.length;i++){
			int countmax=0;
			for(int j=0;j<i;j++){
				if(a[i]>a[j]&&b[j]>countmax){  
					countmax=b[j];	   //記錄下元素數值比a[i]小的但是對應子序列最長的子序列長度
				}
			}
			
			b[i]=countmax+1;	      //a[i]對應的最長子序列長度是
		}
				
	}
	
}

 

 

 

二、出操隊形

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved