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

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

leetcode 2020年3月 每日一题打卡
剑指offer

问题: 输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。

示例 1:
输入:target = 9
输出:[[2,3,4],[4,5]]
示例 2:
输入:target = 15
输出:[[1,2,3,4,5],[4,5,6],[7,8]]
限制:1 <= target <= 10^5

原题链接:https://leetcode-cn.com/problems/he-wei-sde-lian-xu-zheng-shu-xu-lie-lcof/

思路: python 滑动窗口:l是窗口左边界,r是窗口右边界。当窗口中数字和小于target时,r右移; 大于target时,l右移; 等于target时就获得了一个解。

细节: 第一次用两层循环暴力求解,果不其然超过时间限制。

代码:

class Solution(object):
    def findContinuousSequence(self, target):
        """
        :type target: int
        :rtype: List[List[int]]
        """
        # 滑动窗口
        # sum = (start+end)*(end-start+1)/2
        ans=[]

        l=1
        r=2

        while l <= target/2:
            sum = (l+r)*(r-l+1)/2
            if sum == target:
                tem = []
                for i in range(l,r+1):
                    tem.append(i)
                ans.append(tem)
                l+=1
                r=l+1
            elif sum > target:
                l+=1
                r=l+1
            elif sum < target:
                r+=1
            
        return ans

如转载请标明出处!侵权必究

发布了20 篇原创文章 · 获赞 1 · 访问量 207

猜你喜欢

转载自blog.csdn.net/weixin_43973433/article/details/104849069