一組數中最長連續遞增子序列個數

題意:有一組數,如,1,2,3,-2,4,6,10,求該組數中最長連續遞增子序列的個數,顯然這道題的答案是從-2到10一共4個數,所以結果爲4.

解析:這道題最直觀的方法就是用兩個嵌套的循環,遍歷的過程中,噹噹前數比上一個數大時,則計數變量加1,否則退出內層循環,將計數變量和當前最大連續遞增個數變量比較,當比其大時,重新賦值最大連續遞增個數變量。這種方法的時間複雜度顯然爲O(n^2)。

這裏我使用另外一種可以使得時間複雜度降至O(n)的方法:(結合代碼和註釋應該可以看懂,好睏,就不解釋了╮(╯▽╰)╭)

java代碼如下:

import java.util.Random;
public class SlopeUp {
	public static void main(String[] args) {
		int count=30;//測試30個數據
		int[] nums=new int[count];
		Random random=new Random();
		for(int i=0;i<count;i++){
			nums[i]=random.nextInt(100);
			System.out.print(nums[i]+" ");
		}
		System.out.println();
		new SlopeUp().process(nums);
	}
	
	private int[] a; //a[i]表示從開始到i最長連續遞增子序列個數,最後的結果爲:a[a.length-1]
	private int[] b; //b[i]表示到當前i位置有多少個連續遞增個數,如-1,2,4,0,3 則b[2]=3;b[4]=2
	public void process(int[] nums){
		a=new int[nums.length];
		b=new int[nums.length];	
		for(int i=1;i<nums.length;i++){
			
			if(nums[i]>nums[i-1]){
				b[i]=b[i-1]+1;
				if(b[i]+1>a[i-1]){
					System.out.println("The End Number Is:"+nums[i]);
					a[i]=b[i]+1;
				}else{
					a[i]=a[i-1];
				}
			}else{
				a[i]=a[i-1];
			}
		}
		System.out.println(a[a.length-1]);
	}
	
}



發佈了39 篇原創文章 · 獲贊 22 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章