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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

leetcode 面试题57 - II. 和为s的连续正数序列

發布時間:2023/12/20 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 leetcode 面试题57 - II. 和为s的连续正数序列 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

https://leetcode-cn.com/problems/he-wei-sde-lian-xu-zheng-shu-xu-lie-lcof/submissions/

class Solution:def findContinuousSequence(self, target: int) -> List[List[int]]:# 對于一個數target,輸出所有和為 target 的連續正整數序列ans=[]for i in range(1,target):L=[]sum=0for j in range(i,target):L.append(j)sum+=jif(sum==target):ans.append(L)breakelif sum>target:breakreturn ans

模擬大法好

只是效率低
我寫題目的習慣都是能解就先解出來,就算是很低級的解法也沒關系。只有解出來之后才去思考更優化的解法,不然寫半天一個解法都沒想出來,挫敗感很強。

下面嘗試更多解法

two points
仔細分析一下,序列是連續的,并且很像滑動窗口,自然地想到了two points的思路

class Solution:def findContinuousSequence(self, target: int) -> List[List[int]]:# 對于一個數target,輸出所有和為 target 的連續正整數序列ans=[]i,j=1,1L=[i for i in range(target)]s=0while i<target//2+1:t=L[i:j]s=sum(t)if(s==target):ans.append(t)i+=1elif s>target:i+=1elif s<target:j+=1return ans

并且i的區間肯定是只取到target/2+1的整數,因為任何一個數的一半加上大于它一半的數可能會超過它了

再嘗試優化一下,發現并不用每次都切片,只需要記錄i,j和切片區間的和就行了

class Solution:def findContinuousSequence(self, target: int) -> List[List[int]]:# 對于一個數target,輸出所有和為 target 的連續正整數序列ans=[]i,j=1,1L=[i for i in range(target)]s=1while i<target//2+1:if(s==target):ans.append(L[i:j+1])s-=ii+=1elif s>target:s-=ii+=1elif s<target:j+=1s+=jreturn ans

又高了一點

想不到更好的方法了,貼一下題解
https://leetcode-cn.com/problems/he-wei-sde-lian-xu-zheng-shu-xu-lie-lcof/solution/mian-shi-ti-57-ii-he-wei-sde-lian-xu-zheng-shu-x-2/

和別人的題解,講得很清楚
https://leetcode-cn.com/problems/he-wei-sde-lian-xu-zheng-shu-xu-lie-lcof/solution/xiang-jie-hua-dong-chuang-kou-fa-qiu-gen-fa-jian-g/

總結

以上是生活随笔為你收集整理的leetcode 面试题57 - II. 和为s的连续正数序列的全部內容,希望文章能夠幫你解決所遇到的問題。

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