91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

golang刷leetcode技巧之如何實現最長上升子序列

發布時間:2021-12-15 10:03:55 來源:億速云 閱讀:170 作者:小新 欄目:大數據

小編給大家分享一下golang刷leetcode技巧之如何實現最長上升子序列,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!

給定一個無序的整數數組,找到其中最長上升子序列的長度。

示例:

輸入: [10,9,2,5,3,7,101,18]

輸出: 4 

解釋: 最長的上升子序列是 [2,3,7,101],它的長度是 4。

說明:

可能會有多種最長上升子序列的組合,你只需要輸出對應的長度即可。

你算法的時間復雜度應該為 O(n2) 。

進階: 你能將算法的時間復雜度降低到 O(n log n) 嗎?

解題思路:

解法1:動態規劃

1,用dp[i]標識,i 位置的最大長度

2,狀態轉移方程為 dp[i]=max(dp[j]+1) ,j>=0  j<i

3,取dp最大值

解法2:二分查找

1,用數組記錄最長遞增序列

2,如果當前元素比最大值大,則插在后面

2,通過二分查找在遞增序列里查找位置

3,注意和普通二分查找的區別,如果但強位置比序列位置p的元素大,那么插入位置不是p而是p+1

4,輸出p的長度

代碼實現

func lengthOfLIS(nums []int) int {   if len(nums)<1{       return 0   }   dp:=make([]int,len(nums))    for i:=0;i<len(nums);i++{   dp[i]=1    }    max:=1   for i:=1;i<len(nums);i++{       for j:=0;j<i;j++{           if nums[j]<nums[i] && dp[i]<dp[j]+1{               dp[i]=dp[j]+1           }       }       if dp[i]>max{           max=dp[i]       }   }   fmt.Println(dp)   return max}
func lengthOfLIS(nums []int) int {  if len(nums)<1{      return 0  }  var dp []int  dp=append(dp,nums[0])  for i:=1;i<len(nums);i++{      if nums[i]>dp[len(dp)-1]{          dp=append(dp,nums[i])      }else{          l:=0          r:=len(dp)-1          p:=0          for l<=r{              mid:=(l+r)>>1              if nums[i]>dp[mid]{                   p=mid+1                  l=mid+1              }else{                  r=mid-1              }          }           fmt.Println(dp,l,r,p,i,nums[i])           dp[p]=nums[i]            fmt.Println("111",dp,l,r,p,i,nums[i])      }  }  fmt.Println(dp)  return len(dp)}

看完了這篇文章,相信你對“golang刷leetcode技巧之如何實現最長上升子序列”有了一定的了解,如果想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

运城市| 长海县| 东辽县| 江孜县| 泽州县| 清远市| 寻甸| 长汀县| 荔波县| 光泽县| 虎林市| 九江市| 五指山市| 礼泉县| 商洛市| 富川| 尼勒克县| 高平市| 平凉市| 疏附县| 漾濞| 镇沅| 苍溪县| 周宁县| 久治县| 尼玛县| 瑞金市| 卓尼县| 新建县| 光泽县| 霍林郭勒市| 黄石市| 中牟县| 清镇市| 长治县| 盐津县| 梁平县| 萨迦县| 台南市| 将乐县| 株洲市|