双指针
Vaccy Zhu
自律是解决人生问题最主要的工具,也是解决人生痛苦最重要的方法!
展开
-
K和数对的最大数目-数组&双指针1679-c++
原则为较小的数优先和较大的数匹配,所以先排序。原创 2024-03-27 20:39:35 · 96 阅读 · 0 评论 -
压缩字符串-数组443-c++
【代码】压缩字符串-数组443-c++原创 2024-02-28 17:48:22 · 380 阅读 · 0 评论 -
盛水最多的容器-双指针11-python&c++
没看答案,用双指针遍历height数组的左右两端,对于相对短的一边就移动(木桶效应),并不断更新答案。原创 2022-06-24 20:46:57 · 179 阅读 · 0 评论 -
按奇偶排序数组II-双指针922-python
没看答案,找到不符合要求位置的奇数和偶数进行调换即可。class Solution: def sortArrayByParityII(self, nums: List[int]) -> List[int]: n = len(nums) i, j = 0, 1 while True: while i < n and nums[i] % 2 == 0: i += 2原创 2022-05-04 14:35:59 · 106 阅读 · 0 评论 -
回文子串-动态规划647-python
没看答案,双指针+传统判断回文串,用memo储存已经判断过的子串,防止重复判断,时间复杂度O(n^3)。from collections import defaultdictclass Solution: def countSubstrings(self, s: str) -> int: memo = defaultdict(bool) n = len(s) res = 0 def dfs(s, start, end):原创 2022-04-27 14:03:53 · 269 阅读 · 0 评论 -
判断子序列-双指针392-python
没看答案。class Solution: def isSubsequence(self, s: str, t: str) -> bool: ''' 指针i指向s,匹配一个字符前进一位; 指针j指向t,一直前进。 ''' m, n = len(s), len(t) i = j = 0 while i < m and j < n: if t[j]原创 2022-04-02 20:14:26 · 617 阅读 · 0 评论 -
反转字符串II-字符串541-python
没看答案,双指针局部翻转再拼接一起。class Solution: def reverseStr(self, s: str, k: int) -> str: left, right = 0, 0 res = '' while right < len(s): right += k if right >= len(s): res += s[left:][原创 2022-02-18 19:17:16 · 81 阅读 · 0 评论 -
移动零-数组283-python&c++
没看答案class Solution: def moveZeroes(self, nums: List[int]) -> None: """ Do not return anything, modify nums in-place instead. """ if not nums: return L = len(nums) i, j = 0, 1原创 2022-02-09 14:10:06 · 61 阅读 · 0 评论 -
接雨水-双指针42-python&c++
pythonclass Solution: def trap(self, height: List[int]): left, right = 0, len(height) - 1 leftmax, rightmax = height[left], height[right] res = 0 while left != right: if height[left] >= leftmax:原创 2021-08-12 15:31:58 · 98 阅读 · 0 评论 -
找到字符串中所有字母异位词-字符串438-python&c++
滑动窗口pythonimport collectionsclass Solution: def findAnagrams(self, s: str, p: str): left, right = 0, 0 m = len(s) n = len(p) valid = 0 needs = collections.Counter(p) window = {} res = []原创 2021-08-10 13:31:46 · 77 阅读 · 0 评论 -
最小覆盖字串-字符串76-python&c++
滑动窗口pythonimport collectionsimport sysclass Solution: def minWindow(self, s: str, t: str): left, right = 0, 0 n = len(s) needs = collections.Counter(t) window = {} valid = 0 start = 0 length原创 2021-08-09 18:35:02 · 84 阅读 · 0 评论 -
字符串的排列-字符串567-python
滑动窗口pythonimport collectionsclass Solution: def checkInclusion(self, s1: str, s2: str): left, right = 0, 0 n = len(s2) m = len(s1) valid = 0 needs = collections.Counter(s1) window = {} while原创 2021-08-10 12:17:08 · 75 阅读 · 0 评论 -
删除有序数组中的重复项-双指针26-C++
class Solution {public: int removeDuplicates(vector<int>& nums) { if(nums.empty()) return 0; int i = 0; for(int j = 0; j < nums.size(); j++){ if(nums[i] != nums[j]){ i++;转载 2021-03-30 20:01:31 · 121 阅读 · 0 评论 -
合并两个有序数组-双指针88-C++
class Solution {public: void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) { int tail = m + n - 1; int tail1 = m - 1; int tail2 = n - 1; while(tail != tail1){ if(tail1 >=原创 2021-03-18 22:08:42 · 175 阅读 · 0 评论 -
无重复字符的最长字串-字符串3-python&c++
python双指针解法:使用两个指针表示字符串中的某个子串的左右边界。其中左指针代表着某个子串的起始位置,而右指针代表着某个字串的终止位置;在每一步的操作中,将左指针向右移动一格,表示开始枚举下一个字符作为起始位置,然后不断地向右移动右指针,但需要保证这两个指针对应的子串中没有重复的字符。在移动结束后,这个子串就对应着以左指针开始的,不包含重复字符的最长子串。最后记录下这个子串的长度即为答案;class Solution: def lengthOfLongestSubstring(se原创 2021-02-05 21:23:33 · 110 阅读 · 0 评论 -
三数之和-双指针15-python&C++
python1.a+b+c=0,自由度为2,所以可以不用三循环,而使用双循环;2.先给数组从小到大排序,即保证a≤b≤c,从而避免答案出现[a,b,c],[b,c,a]…等重复数组;3.固定a后,寻找b,c的过程可以利用双指针,b和c分别从前往后和从后往前枚举,从而避免重复查找。class Solution: def threeSum(self, nums): n = len(nums) nums.sort() # 为避免重复输出,从小到大对输入数组排序原创 2021-02-05 22:41:48 · 145 阅读 · 1 评论 -
相交链表-链表160-python&c++
Python双指针法:创建两个指针 pA 和 pB,分别初始化为链表 A 和 B 的头结点。然后让它们向后逐结点遍历;当 pA 到达链表的尾部时,将它重定位到链表 B 的头结点; 类似的,当 pB 到达链表的尾部时,将它重定位到链表 A 的头结点;若在某一时刻 pA 和 pB 相遇,则 pA(pB) 为相交结点;如果两个链表存在相交,它们末尾的结点必然相同。因此当 pA或pB 到达链表结尾时,记录下链表 A或B对应的元素。若最后元素不相同,则两个链表不相交。# Definition for原创 2021-02-13 15:28:14 · 111 阅读 · 1 评论