程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

【Day3】最長上升子序列|Python

編輯:Python

前言🫠

隨著Python語言的熱度上升,將來將會有越來越多的小伙伴入坑Python。因為它不僅是一門編程語言,更是一個強大的武器。對於非計算機專業的理工科學生來說,可以學不會C 但必須要懂Python。因為不管是 人工智能 / 深度學習 / 爬蟲 / 數據分析 等等領域都離不開對於Python的使用。

而深入了解並掌握一門編程語言,最好的方法就是學算法。y總曾舉過一個例子 如果做一個Django框架 寫一個Web網頁的難度是100分,那麼數據結構與算法就是5000分。而且算法 是入職幾乎必須掌握的知識 面試中常有用到。

本專欄的目的旨在於幫助想使用Python作為主語言的小伙伴快速上手數據結構與算法,因為目前用Python寫算法還不是很普遍,網上也很難找到相關的資源,大部分都是C++和Java的。對於剛入坑的小白而言,無疑是一件難事。

在本專欄中,共有三十講,都是一些經典算法或數據結構的入門。然而,相關算法的對應知識點我可能不會詳細進行講解,因為網上已經有很多優秀的講解了。但我會將這個數據結構或算法的Python實現展示出來 並配有模版例題。代碼會有詳細注釋,只要你懂Python語法,看過了這個算法的實現方式,我保證你能看得懂對應的Python代碼。

祝 學習愉快

模型講解: 

狀態定義:dp[i]表示以nums[i]為結尾的最長子序列長度
狀態轉移:dp[i] = dp[j] + 1, 其中0 < j < i, 且nums[j] < nums[i]
對於每一個i,找到i之前最長的子序列,並且把i添加到尾部,構成一個新的最長上升子序列

模版例題: 

給你一個整數數組 nums ,找到其中最長嚴格遞增子序列的長度。

子序列 是由數組派生而來的序列,刪除(或不刪除)數組中的元素而不改變其余元素的順序。例如,[3,6,2,7] 是數組 [0,3,1,6,2,2,7] 的子序列。

 
示例 1:

輸入:nums = [10,9,2,5,3,7,101,18]
輸出:4
解釋:最長遞增子序列是 [2,3,7,101],因此長度為 4 。
示例 2:

輸入:nums = [0,1,0,3,2,3]
輸出:4
示例 3:

輸入:nums = [7,7,7,7,7,7,7]
輸出:1
 

提示:

1 <= nums.length <= 2500
-10^4 <= nums[i] <= 10^4

Python3代碼: 


num = int(input())
mountBox = list(map(int,input().split())) # 數組
Maxlen = [1 for i in range(num)] # 以第i個數字結尾的最長上升子序列
for i in range(num) :
for j in range(i) : # 枚舉比i靠前的數
if mountBox[j] < mountBox[i] : # 如果這個數比當前數小
Maxlen[i] = max(Maxlen[j]+1,Maxlen[i]) # 更新答案
print(max(Maxlen))


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved