o(nlogn)的演算法關鍵是它建立了乙個陣列temp,temp[i]表示長度為i的不下降序列中結尾元素的最小值,用top表示陣列目前的長度,演算法完成後top的值即為最長不下降子串行的長度。
設當前的以求出的長度為top,則判斷num[i]和temp[top]:
1.如果num[i]>=temp[top],即num[i]大於長度為top的序列中的最後乙個元素,這樣就可以使序列的長度增加1,即top++,然後現在的temp[top]=num[i];
2.如果num[i]
#includeint num[1000],temp[1000];
int top;
int binary_search(int x)
} }//找到序列中不大於x的最大的數,正因為二分查詢才使得複雜度變身為n*log(n)
int main()
} printf("%d\n",top+1);
} return 0;
}
nlogn 最長不下降子串行
o nlogn 的演算法關鍵是它建立了乙個陣列temp,temp i 表示長度為i的不下降序列中結尾元素的最小值,用top表示陣列目前的長度,演算法完成後top的值即為最長不下降子串行的長度。設當前的以求出的長度為top,則判斷num i 和temp top 1.如果num i temp top 即...
最長不下降子串行nlogn演算法詳解
今天花了很長時間終於弄懂了這個演算法 畢竟找乙個好的講解真的太難了,所以勵志我要自己寫乙個好的講解qaq 這篇文章是在懂了這個問題n 2解決方案的基礎上學習。解決的問題 給定乙個序列,求最長不下降子串行的長度 nlogn的演算法沒法求出具體的序列是什麼 定義 a 1.n 為原始序列,d k 表示長度...
最長不下降子串行
a1 t0 an a an 1 2 b an c d n 1 求該序列最長不下降子串行長度 n不是很大顯然可以暴力。n很大呢?那就不斷減迴圈節長度直至減到乙個閾值內,再暴力。正確性顯然,只要閾值不要設太小。include include include define fo i,a,b for i a...