zoukankan      html  css  js  c++  java
  • [GeeksForGeeks] Longest Bitonic Subsequence

    Given an array arr[0.....n-1] containing n positive integers, find the length of the longest bitonic subsequence. 

    A subsequence of arr[] is called Bitonic if it is first increasing, then decreasing.

    Analysis: 

    This problem is a variation of the standard Longest Increasing Subsequence(LIS) problem.  In the standard LIS

    problem, we use dynamic programming and create a 1D array lis[i], lis[i] is the length of the longest increasing subsequence 

    that ends with arr[i]. 

    In this problem, we construct two arrays lis[i] and ids[i] using dynamic programming.

    lis[i] stores the length of the longest increasing subsequence ending with arr[i];

    lds[i] stores the length of the longest decreasing subsequence starting from arr[i];

    Finally, we need to return the max value of lis[i] + lds[i] - 1, where i is from 0 to n - 1.

     1 public class Solution {
     2     public int longestBitonicSubsequence(int[] arr){
     3         if(arr == null || arr.length == 0){
     4             return 0;
     5         }
     6         int[] lis = new int[arr.length];
     7         int[] lds = new int[arr.length];
     8         for(int i = 0; i < arr.length; i++){
     9             lis[i] = 1;
    10             lds[i] = 1;
    11         }
    12         for(int i = 0; i < arr.length; i++){
    13             for(int j = 0; j < i; j++){
    14                 if(arr[i] > arr[j] && lis[i] < lis[j] + 1){
    15                     lis[i] = lis[j] + 1;
    16                 }
    17             }
    18         }
    19         for(int i = arr.length - 1; i >= 0; i--){
    20             for(int j = arr.length - 1; j > i; j--){
    21                 if(arr[i] > arr[j] && lds[i] < lds[j] + 1){
    22                     lds[i] = lds[j] + 1;
    23                 }
    24             }
    25         }
    26         int max = 0;
    27         for(int i = 0; i < arr.length; i++){
    28             if(lis[i] + lds[i] - 1 > max){
    29                 max = lis[i] + lds[i] - 1;
    30             }
    31         }
    32         return max;
    33     }
    34 }

    Related Problems

    Longest Increasing Subsequence

  • 相关阅读:
    Express中间件简介
    Express中间件概念
    浏览器cookie插件
    node=day7
    cookie可视化操作工具---EditThisCookie
    node之cookie和session对比
    node通过session保存登录状态
    浅谈表单同步提交和异步提交
    node.js服务端存储用户密码md5加密
    jQuery的ajax里dataType预期服务器返回数据类型
  • 原文地址:https://www.cnblogs.com/lz87/p/7209113.html
Copyright © 2011-2022 走看看