麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 開發 > Java > 正文

Java實現求數組最長子序列算法示例

2024-07-14 08:41:30
字體:
來源:轉載
供稿:網友

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

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

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

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

java實現代碼:

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;  // 從后往前遍歷數組,分別求出以arr[i]結尾的時候的最長子序列長度  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;   // 最長子序列的長度最長為原始數組的長度,   // 因為不需要我們求最長子序列的元素,所以直接結束循環,減少時間開銷   if (max == maxLen)    break;  }  System.out.println(max); } public static int dp(int[] arr, int end) {  // 遞歸結束條件  if (arr.length == 1) {   // 小于end則包含在子序列中,子序列長度+1   if (arr[0] <= end)    return 1;   else    return 0;  }  // 遍歷數組,找到最靠近end的并且<=end的元素位置i  for (int i = arr.length - 1; i >= 0; i--) {   if (arr[i] <= end) {    // 從i處截斷數組,將arr[0]到arr[i-1]組成新數組繼續遞歸求長度    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; }}

運行結果:

6

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

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


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 欧美一区二区三区不卡免费观看 | 国产人成精品综合欧美成人 | 久久久久久久久成人 | 福利一区二区三区视频在线观看 | 欧美一级黄色网 | 嗯哈~不行好大h双性 | 小情侣嗯啊哦视频www | 伊人av影院 | 日韩精品久久久久久久电影99爱 | 成人毛片在线 | 黄色免费高清网站 | 情侣啪啪网站 | 亚洲影院在线 | 精品一区二区三区欧美 | 久久精品视频亚洲 | 超碰人人做人人爱 | 免费淫视频 | 国产精品久久二区 | 国产亚洲高清在线精品不卡 | 久久亚洲精品久久国产一区二区 | 国产一区二区三区黄 | 久久久大片 | av成人免费在线观看 | 嗯~啊~用力~高h | 国产精品成人久久 | 久久免费视频一区 | 欧美特一级片 | 国产黄色毛片 | 国产91精品久久久 | www.99re14.com| 九九热精品在线 | 欧美日韩在线视频一区 | 日韩黄色精品 | 一区二区视频在线看 | www久久艹| 成人三级视频在线观看 | 特级黄色小说 | 国产电影av在线 | 中文字幕在线免费观看电影 | 久久久噜噜噜久久熟有声小说 | 亚洲一区成人在线 |