❤️写在开头:
目录:
🦝🦝一,什么是双指针
🐸🐸二,对撞指针
👀👀👀 看例题👀👀👀
💻💻代码实现💻💻
🐇🐢三,快慢指针
👀👀👀 看例题👀👀👀
💻💻代码实现💻💻
🦄🦄四,滑动窗口
👀👀👀 看例题👀👀👀
💻💻代码实现💻💻
❤️❤️结尾
🦝🦝一,什么是双指针
细分的话,双指针可以分为好几个类型:
接下来会结合例题详细讲解 。
🐸🐸二,对撞指针
👀👀👀 看例题👀👀👀
💻💻代码实现💻💻:
class Solution {
public:
void reverseString(vector<char>& s) {
for (int i=0,j=s.size()-1;i<s.size()/2;i++,j--){ //设置i 和 j 两个指针,一左一右
swap(s[i],s[j]);
}
}
};
链接:力扣
🐇🐢三,快慢指针
👀👀👀 看例题👀👀👀
💻💻代码实现💻💻:
class Solution {
public ListNode middleNode(ListNode head) {
ListNode p = head, q = head;
while (q != null && q.next != null) {
q = q.next.next;
p = p.next;
}
return p;
}
}
链接: 力扣
🦄🦄四,滑动窗口
👀👀👀 看例题👀👀👀
💻💻代码实现💻💻:
class Solution {
public:
bool checkInclusion(string s1, string s2) {
int n = s1.length(), m = s2.length();
if (n > m) {
return false;
}
vector<int> cnt1(26), cnt2(26);
for (int i = 0; i < n; ++i) {
++cnt1[s1[i] - 'a'];
++cnt2[s2[i] - 'a'];
}
if (cnt1 == cnt2) {
return true;
}
for (int i = n; i < m; ++i) {
++cnt2[s2[i] - 'a'];
--cnt2[s2[i - n] - 'a'];
if (cnt1 == cnt2) {
return true;
}
}
return false;
}
};
链接:力扣
❤️❤️结尾: