欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java實現(xiàn)求數(shù)組最長子序列算法示例

 更新時間:2018年07月11日 11:35:32   作者:antchow-  
這篇文章主要介紹了Java實現(xiàn)求數(shù)組最長子序列算法,涉及java針對數(shù)組的遞歸遍歷、判斷相關(guān)操作技巧,需要的朋友可以參考下

本文實例講述了Java實現(xiàn)求數(shù)組最長子序列算法。分享給大家供大家參考,具體如下:

問題:給定一個長度為N的數(shù)組,找出一個最長的單調(diào)自增子序列(不一定連續(xù),但是順序不能亂) 例如:給定一個長度為8的數(shù)組A{1,3,5,2,4,6,7,8},則其最長的單調(diào)遞增子序列為{1,2,4,6,7,8},長度為6。

思路1:第一眼看到題目,很多人肯定第一時間想到的是LCS。先給數(shù)組排個序形成新數(shù)組,然后再把新數(shù)組和原數(shù)組拿來求LCS,即可得到答案。這種解法很多人能想得到,所以就不再贅述。

思路2:按照思路1的想法,最后求LCS時還是得用到DP,我們干嘛不直接用DP來求解呢。對于數(shù)組arr,我們從后往前遍歷數(shù)組,分別求出當子序列以arr[i]結(jié)尾時的最長子序列,然后取其中的最大值。即可得到整個數(shù)組的最長子序列。 那么怎么求以arr[i]結(jié)尾時的最長子序列呢,這就轉(zhuǎn)換成一個DP問題了。要求arr[i]的最長子序列,只需要求出arr[i-1]的最長子序列。即:max{arr[i]}=max{arr[i-1]}+1。

java實現(xiàn)代碼:

public class arrDemo {
 public static void main(String[] args) {
  // int[] arr = {89, 256, 78, 1, 46, 78, 8};
  int[] arr = { 1, 3, 5, 2, 4, 6, 7, 8 };
  // int[] arr = {6, 4, 8, 2, 17};
  int max = 0;
  int maxLen = arr.length;
  // 從后往前遍歷數(shù)組,分別求出以arr[i]結(jié)尾的時候的最長子序列長度
  for (int i = arr.length - 1; i > 0; i--) {
   int[] newArr = new int[i];
   System.arraycopy(arr, 0, newArr, 0, i);
   int currentLength = 1 + dp(newArr, arr[i]);
   if (currentLength > max)
    max = currentLength;
   // 最長子序列的長度最長為原始數(shù)組的長度,
   // 因為不需要我們求最長子序列的元素,所以直接結(jié)束循環(huán),減少時間開銷
   if (max == maxLen)
    break;
  }
  System.out.println(max);
 }
 public static int dp(int[] arr, int end) {
  // 遞歸結(jié)束條件
  if (arr.length == 1) {
   // 小于end則包含在子序列中,子序列長度+1
   if (arr[0] <= end)
    return 1;
   else
    return 0;
  }
  // 遍歷數(shù)組,找到最靠近end的并且<=end的元素位置i
  for (int i = arr.length - 1; i >= 0; i--) {
   if (arr[i] <= end) {
    // 從i處截斷數(shù)組,將arr[0]到arr[i-1]組成新數(shù)組繼續(xù)遞歸求長度
    int[] newArr = new int[i];
    System.arraycopy(arr, 0, newArr, 0, i);
    // 分別計算包含arr[i]時的最長子序列和不包含arr[i]時的最長子序列,取最大值
    int containLen = dp(newArr, arr[i]) + 1;
    int notContainLen = dp(newArr, end);
    return containLen > notContainLen ? containLen : notContainLen;
   }
  }
  // 如果沒找到比end更小的,返回長度為0
  return 0;
 }
}

運行結(jié)果:

6

我的方法由于中間開辟了多個新數(shù)組,可能占用的空間有點多,不過我覺得應(yīng)該也不是很多- -,具體我也沒統(tǒng)計過。如果有不對的地方還請指正。

更多關(guān)于java算法相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java操作DOM節(jié)點技巧總結(jié)》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總

希望本文所述對大家java程序設(shè)計有所幫助。

相關(guān)文章

  • Java Spring分別實現(xiàn)定時任務(wù)方法

    Java Spring分別實現(xiàn)定時任務(wù)方法

    這篇文章主要為大家詳細介紹了Java與Spring設(shè)置動態(tài)定時任務(wù)的方法,定時任務(wù)的應(yīng)用場景十分廣泛,如定時清理文件、定時生成報表、定時數(shù)據(jù)同步備份等
    2022-07-07
  • springboot單獨使用feign簡化接口調(diào)用方式

    springboot單獨使用feign簡化接口調(diào)用方式

    這篇文章主要介紹了springboot單獨使用feign簡化接口調(diào)用方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Java 8 lambda初試示例詳解

    Java 8 lambda初試示例詳解

    這篇文章主要介紹了Java 8 lambda初試示例詳解,需要的朋友可以參考下
    2017-04-04
  • Maven工程路徑映射的實現(xiàn)示例

    Maven工程路徑映射的實現(xiàn)示例

    本文主要介紹了Maven工程路徑映射的實現(xiàn)示例,文中通過圖文介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧
    2024-04-04
  • java數(shù)據(jù)結(jié)構(gòu)實現(xiàn)順序表示例

    java數(shù)據(jù)結(jié)構(gòu)實現(xiàn)順序表示例

    這篇文章主要介紹了java數(shù)據(jù)結(jié)構(gòu)實現(xiàn)順序表示例,需要的朋友可以參考下
    2014-03-03
  • SpringBoot+layui實現(xiàn)文件上傳功能

    SpringBoot+layui實現(xiàn)文件上傳功能

    Spring Boot是由Pivotal團隊提供的全新框架,其設(shè)計目的是用來簡化新Spring應(yīng)用的初始搭建以及開發(fā)過程。這篇文章主要介紹了SpringBoot+layui實現(xiàn)文件上傳,需要的朋友可以參考下
    2018-09-09
  • Java實現(xiàn)音頻轉(zhuǎn)碼(WAV、MP3、AMR互轉(zhuǎn))

    Java實現(xiàn)音頻轉(zhuǎn)碼(WAV、MP3、AMR互轉(zhuǎn))

    本文主要介紹了Java實現(xiàn)音頻轉(zhuǎn)碼,包括WAV、MP3、AMR互轉(zhuǎn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧
    2024-02-02
  • Java對稱加密算法DES實例詳解

    Java對稱加密算法DES實例詳解

    這篇文章主要介紹了Java對稱加密算法DES,結(jié)合實例形式詳細分析了java DES算法的概念、原理、實現(xiàn)方法與應(yīng)用場景,需要的朋友可以參考下
    2019-09-09
  • Spring?Security中的CORS詳解

    Spring?Security中的CORS詳解

    CORS(Cross-Origin?Resource?Sharing)是一種允許不同源之間進行資源共享的W3C標準,它通過在服務(wù)器端設(shè)置特定的HTTP響應(yīng)頭,實現(xiàn)了跨域請求的功能,這種機制要求瀏覽器和服務(wù)器的支持,本文給大家介紹Spring?Security中的CORS,感興趣的朋友一起看看吧
    2024-10-10
  • SpringBoot項目開發(fā)中常用的依賴

    SpringBoot項目開發(fā)中常用的依賴

    這篇文章主要介紹了SpringBoot項目開發(fā)中常用的依賴詳解,本文通過示例代碼給大家介紹的非常詳細,對大家的學(xué)習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-06-06

最新評論