栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python–leetcode–双指针(滑动窗口)

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python–leetcode–双指针(滑动窗口)

15. 三数之和

三数之和 找出所有和为 0 且不重复的三元组
思路 总体排序 先固定一个点 设定下一个点和结尾点为双指针进行移动

def threeSum(nums):
 nums.sort()
 res, k [], 0
 for k in range(len(nums) - 2):
 if nums[k] 0:
 break # 如果首元素大于0 结果不可能为0
 if k 0 and nums[k] nums[k - 1]:
 continue # 固定点和前一个点值相同 跳过
 i, j k 1, len(nums) - 1
 while i j:
 s nums[k] nums[i] nums[j]
 if s 0:
 while i j and nums[i] nums[i - 1]:
 elif s 0:
 j - 1
 while i j and nums[j] nums[j 1]:
 j - 1
 else:
 res.append([nums[k], nums[i], nums[j]])
 j - 1
 while i j and nums[i] nums[i - 1]:
 while i j and nums[j] nums[j 1]:
 j - 1
 return res
76. 最小覆盖子串

最小覆盖子串:给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。 如果 s 中不存在涵盖 t 所有字符的子串 则返回空字符串 “”
思路 使用滑动窗口 不断弹出左边字母直到不满足条件右指针继续前进。使用need_match_len作为需要匹配字符的个数 为0说明满足覆盖条件。

from collections import defaultdict, Counter
def minWindow(s, t):
 t_dict Counter(t)
 need_match_len len(t)
 res (0, float( inf ))
 left 0
 for right in range(len(s)):
 if t_dict[s[right]] 0:
 need_match_len - 1
 t_dict[s[right]] - 1
 while need_match_len 0:
 if res[1] - res[0] right - left:
 res (left, right)
 t_dict[s[left]] 1
 if s[left] in t and t_dict[s[left]] 0:
 need_match_len 1
 left 1
 return s[res[0]: res[1] 1] if res[1] - res[0] len(s) else 
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/266809.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号