给定一个数字序列,找到最长递增子序列长度(LIS)

要找到给定数字序列的最长递增子序列(LIS)的长度,可以使用动态规划或二分查找结合动态规划的方法。以下是这两种方法的简要说明和实现:

方法 1:动态规划

动态规划方法的时间复杂度为  O(n2) O ( n 2 ),其中  n n 是序列的长度。

  1. 定义状态‌:设  dp[i] 表示以第  i 个元素结尾的最长递增子序列的长度。
  2. 状态转移方程‌: dp[i]=max⁡(dp[j]+1)其中 0≤j d p [ i ] = max ( d p [ j ] + 1 ) 其中   0 j < i     sequence [ j ] < sequence [ i ]初始时,每个  dp[i] 都为 1,因为每个元素自身可以构成一个长度为 1 的递增子序列。
  3. 结果‌: dp 数组中的最大值即为最长递增子序列的长度。
pythonCopy Codedef length_of_LIS(nums):    if not nums:        return 0
    
    n = len(nums)
    dp = [1] * n    
    for i in range(1, n):        for j in range(i):            if nums[i] > nums[j]:
                dp[i] = max(dp[i], dp[j] + 1)    
    return max(dp)# 示例nums = [10, 9, 2, 5, 3, 7, 101, 18]print(length_of_LIS(nums))  # 输出: 4

方法 2:动态规划 + 二分查找

这种方法的时间复杂度为  O(nlog⁡n) O ( n lo g n ),更为高效。

  1. 维护一个数组  tails‌: tails[i] 表示长度为  i+1 的所有递增子序列的结尾元素的最小值。
  2. 遍历序列‌:
    • 对于每个元素  x,用二分查找在  tails 中找到第一个大于等于  x 的位置  pos
    • 如果  x 大于  tails 中的所有元素,则将  x 添加到  tails 的末尾,表示找到了一个更长的递增子序列。
    • 否则,更新  tails[pos] = x,以保持  tails 的最优性(即结尾元素尽可能小)。
  3. 结果‌: tails 的长度即为最长递增子序列的长度。
pythonCopy Codefrom bisect import bisect_leftdef length_of_LIS(nums):
    tails = []    
    for x in nums:
        pos = bisect_left(tails, x)        if pos == len(tails):
            tails.append(x)        else:
            tails[pos] = x    
    return len(tails)# 示例nums = [10, 9, 2, 5, 3, 7, 101, 18]print(length_of_LIS(nums))  # 输出: 4

这两种方法都可以有效地找到最长递增子序列的长度,选择哪种方法取决于具体需求和性能考虑。


http://travel.zgjzs.org

http://hotel.zgjzs.org

http://food.zgjzs.org

http://tech.zgjzs.org

http://health.zgjzs.org

http://edu.zgjzs.org

http://music.zgjzs.org

http://sports.zgjzs.org

http://fashion.zgjzs.org

http://auto.zgjzs.org

http://finance.zgjzs.org

http://law.zgjzs.org

http://art.zgjzs.org

http://book.zgjzs.org

http://movie.zgjzs.org

http://game.zgjzs.org

http://job.zgjzs.org

http://house.zgjzs.org

http://kids.zgjzs.org

http://pet.zgjzs.org

http://beauty.zgjzs.org

http://garden.zgjzs.org

http://science.zgjzs.org

http://history.zgjzs.org

http://culture.zgjzs.org

http://city.zgjzs.org

http://weather.zgjzs.org

http://map.zgjzs.org

http://data.zgjzs.org

http://energy.zgjzs.org

http://eco.zgjzs.org

http://farm.zgjzs.org

http://market.zgjzs.org

http://trade.zgjzs.org

http://service.zgjzs.org

http://club.zgjzs.org

http://event.zgjzs.org

http://festival.zgjzs.org

http://expo.zgjzs.org

http://museum.zgjzs.org

http://library.zgjzs.org

http://school.zgjzs.org

http://hospital.zgjzs.org

http://bank.zgjzs.org

http://insurance.zgjzs.org

http://stock.zgjzs.org

http://invest.zgjzs.org

http://tour.zgjzs.org

http://electronics.shangpin.org

http://clothing.shangpin.org

http://furniture.shangpin.org

http://jewelry.shangpin.org

http://cosmetic.shangpin.org

http://digital.shangpin.org

http://appliance.shangpin.org

http://outdoor.shangpin.org

http://sporting.shangpin.org

http://luxury.shangpin.org

http://grocery.shangpin.org

http://office.shangpin.org

http://tool.shangpin.org

http://craft.shangpin.org

http://antique.shangpin.org

http://collectible.shangpin.org

http://handmade.shangpin.org

http://organic.shangpin.org

http://baby.shangpin.org

http://watch.shangpin.org

http://bag.shangpin.org

http://shoe.shangpin.org

http://glass.shangpin.org

http://ceramic.shangpin.org

http://textile.shangpin.org

http://metal.shangpin.org

http://wood.shangpin.org

http://stone.shangpin.org

http://plastic.shangpin.org

http://paper.shangpin.org

http://ink.shangpin.org

http://paint.shangpin.org

http://lighting.shangpin.org

http://kitchen.shangpin.org

http://bath.shangpin.org

http://bed.shangpin.org

http://sofa.shangpin.org

http://carpet.shangpin.org

http://curtain.shangpin.org

http://lamp.shangpin.org

http://mirror.shangpin.org

http://clock.shangpin.org

http://vase.shangpin.org

http://frame.shangpin.org

http://toy.shangpin.org

http://instrument.shangpin.org

http://plant.shangpin.org

http://gift.shangpin.org

http://business.snjrw.org

http://media.snjrw.org

http://design.snjrw.org

http://photo.snjrw.org

http://video.snjrw.org

http://studio.snjrw.org

http://network.snjrw.org

http://cloud.snjrw.org

http://career.snjrw.org

http://learning.snjrw.org

http://research.snjrw.org

http://innovation.snjrw.org

http://project.snjrw.org

http://solution.snjrw.org

http://global.snjrw.org

http://local.snjrw.org

http://china.snjrw.org

http://asia.snjrw.org

http://europe.snjrw.org

http://america.snjrw.org

http://africa.snjrw.org

http://ocean.snjrw.org

http://space.snjrw.org

http://earth.snjrw.org

http://nature.snjrw.org

http://green.snjrw.org

http://future.snjrw.org

http://ai.snjrw.org

http://robot.snjrw.org

http://vr.snjrw.org

http://ar.snjrw.org

http://iot.snjrw.org

http://blockchain.snjrw.org

http://crypto.snjrw.org

http://nft.snjrw.org

http://metaverse.snjrw.org

http://smart.snjrw.org

http://safe.snjrw.org

http://privacy.snjrw.org

http://security.snjrw.org

http://trust.snjrw.org

http://quality.snjrw.org

http://certified.snjrw.org

http://premium.snjrw.org

http://elite.snjrw.org

http://vip.snjrw.org

http://prime.snjrw.org

http://gold.snjrw.org

请使用浏览器的分享功能分享到微信等