一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|JavaScript|易語言|

服務器之家 - 編程語言 - Java教程 - Java實現求數組最長子序列算法示例

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

2021-05-14 11:12antchow- Java教程

這篇文章主要介紹了Java實現求數組最長子序列算法,涉及java針對數組的遞歸遍歷、判斷相關操作技巧,需要的朋友可以參考下

本文實例講述了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實現代碼:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
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程序設計有所幫助。

原文鏈接:https://blog.csdn.net/ztzy520/article/details/78018321

延伸 · 閱讀

精彩推薦
  • Java教程protobuf與json轉換小結

    protobuf與json轉換小結

    protobuf對象不能直接使用jsonlib去轉,因為protobuf生成的對象的get方法返回的類型有byte[],而只有String類型可以作為json的key,protobuf提供方法進行轉換...

    涂墨留香5942020-11-28
  • Java教程詳解spring多線程與定時任務

    詳解spring多線程與定時任務

    本篇文章主要介紹了spring多線程與定時任務,詳細的介紹了spring多線程任務和spring定時任務,有興趣的可以了解一下。...

    全力以赴0014772020-09-09
  • Java教程通過java.util.TreeMap源碼加強紅黑樹的理解

    通過java.util.TreeMap源碼加強紅黑樹的理解

    通過分析java.util.TreeMap源碼來對經典問題紅黑樹加強理解和理清思路。...

    fireway9272021-02-07
  • Java教程Java接口RandomAccess全面了解

    Java接口RandomAccess全面了解

    下面小編就為大家帶來一篇Java接口RandomAccess全面了解。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧 ...

    jingxian4372020-06-12
  • Java教程JAVA反射機制實例教程

    JAVA反射機制實例教程

    這篇文章主要介紹了JAVA反射機制,包括了Java反射機制的各種應用技巧,非常具有實用價值,需要的朋友可以參考下 ...

    shichen20144152019-11-29
  • Java教程測試同學上手Spring 之IoC深入解析

    測試同學上手Spring 之IoC深入解析

    想要理解Spring,必須要掌握的兩個知識點就是IoC和AOP,在這里我首先帶大家了解一下什么是IoC。為大家上手Sping編碼做好前期最充分的知識儲備,做到有的...

    今日頭條8352021-03-17
  • Java教程Java 異常詳解

    Java 異常詳解

    本文主要介紹了異常與錯誤的區別,異常的體現分類,異常的處理機制,如何自定義異常等,具有很好的參考價值,下面跟著小編一起來看下吧 ...

    雨點的名字3382020-08-04
  • Java教程Java中對象的銷毀方法分析

    Java中對象的銷毀方法分析

    這篇文章主要介紹了Java中對象的銷毀方法,較為詳細的分析了對象的功能、用法及銷毀對象對于程序運行的益處,需要的朋友可以參考下 ...

    司青5382019-12-16
主站蜘蛛池模板: 国产精品自在线 | 亚洲精品6久久久久中文字幕 | aaa一级毛片免费 | 国产美女亚洲精品久久久综合91 | 九九精品免视看国产成人 | 青青热久久综合网伊人 | 欧美在线播放成人免费 | 亚欧美色 | 日韩香蕉网 | 天天色综合久久 | 日韩毛片基地一区二区三区 | 成人性色生活片免费网 | 狠狠色综合久久婷婷色天使 | 亚洲AV午夜精品麻豆AV | 亚洲第一天堂网 | 国产肥臀 | 香蕉在线播放 | 国产综合视频 | 色呦阁 | 欧美一级专区免费大片 | 青草悠悠视频在线观看 | 二次元美女扒开内裤露尿口 | 国产精品亚洲精品日韩已方 | 日韩风月片| 国产在线看片护士免费视频 | 从后面撕开老师的丝袜动态图 | 亚州男人天堂 | 国产99精品免费视频看6 | hh99me福利毛片 | 四虎在线视频免费观看 | 午夜爽喷水无码成人18禁三级 | 精品美女国产互换人妻 | 国产精彩视频 | 男人女人日皮 | 人性本色 | 精品福利一区 | www四虎影院| 无码国产成人777爽死在线观看 | 天天操精品视频 | 男人都懂www深夜免费网站 | 87影院在线观看视频在线观看 |