日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

leetcode1027

發布時間:2025/3/8 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 leetcode1027 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最直接的思路是三層循環,但是會超時,代碼如下:

1 public class Solution 2 { 3 public int LongestArithSeqLength2(int[] A) 4 { 5 var maxLength = 2; 6 var len = A.Count(); 7 for (var i = 0; i < len; i++) 8 { 9 for (var j = i + 1; j < len; j++) 10 { 11 var curmax = 2; 12 var target = A[i] - A[j]; 13 var next = A[j] - target; 14 for (var k = j + 1; k < len; k++) 15 { 16 if (A[k] == next) 17 { 18 curmax++; 19 next = A[k] - target; 20 } 21 22 } 23 maxLength = Math.Max(maxLength, curmax); 24 } 25 } 26 return maxLength; 27 } 28 }

但同樣的代碼,使用java實現,卻可以正常提交,leetcode對這道題目的的判斷機制有點奇怪。

如果想解決超時問題,可以考慮使用哈希或者dp思想,來減少判斷的時間。

這種題目,做起來很麻煩,看看別人的思路吧。

?

當時沒想出來怎么做,經過一段時間的練習(兩個半月),重新做這道題目,順利做出來了,說明練習還是有效果的。

給出一份python的實現:

1 class Solution: 2 def longestArithSeqLength(self, A: 'List[int]') -> int: 3 n = len(A) 4 if n == 2: 5 return 2 6 dic = {0:{0:1}} 7 longest = 0 8 for i in range(1,n): 9 if i not in dic: 10 dic[i] = {0:1} 11 for j in range(i): 12 diff = A[i] - A[j] 13 if diff not in dic[j]: 14 dic[i][diff] = 2 15 else: 16 dic[i][diff] = dic[j][diff] + 1 17 longest = max(longest,dic[i][diff]) 18 return longest

使用hash緩存之前的記錄,從三層循環減少為兩層循環,時間復雜度為O(n^2),但是增加了空間復雜度。典型的用空間換時間的思想。

dic是一個字典,key值是數組的下標,value值是一個字典類型。

這個value字典,key值是int類型,表示兩項之間的差;value值是int類型,表示這個差值形成的等差數列的長度。

因此每次循環用longest記錄任意一個差值所形成的最長的等差數列的長度,即為所求。

轉載于:https://www.cnblogs.com/asenyang/p/10704697.html

總結

以上是生活随笔為你收集整理的leetcode1027的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。