
双指针
双指针leetcode
anieoo
这个作者很懒,什么都没留下…
展开
-
剑指 Offer 48. 最长不含重复字符的子字符串
原题链接:剑指 Offer 48. 最长不含重复字符的子字符串 solution: 滑动窗口模板题原创 2022-07-11 23:51:18 · 103 阅读 · 0 评论 -
392. 判断子序列
原题链接:392. 判断子序列 solution: 动态规划:状态表示:dp[i][j]:表示s的前i个字母是否是t的前j的字母的子序列 状态计算: 如果s[i] == t[j]则,dp[i][j] = dp[i - 1][j - 1],否则dp[i][j] = dp[i][j - 1] 双指针,只有s[j] == t[i],指针j才向后移动。...原创 2022-07-04 10:23:28 · 91 阅读 · 0 评论 -
30. 串联所有单词的子串
原题链接:30. 串联所有单词的子串 solution: 哈希表+计数 滑动窗口:原创 2022-06-23 10:25:15 · 97 阅读 · 0 评论 -
719. 找出第 K 小的数对距离
原题链接:719. 找出第 K 小的数对距离 Solution:二分+排序+双指针① 数对距离一定在数组元素的最大值max - 最小值min中 ② 将数组nums进行排序,计算出二分的区间l = 0,r = nums.back() - nums[0]; ② 编写函数计算出数组中数对距离小于等于k的个数(双指针),利用此函数进行二分...原创 2022-06-15 10:36:00 · 245 阅读 · 0 评论 -
38. 外观数列
原题链接:38. 外观数列 solution: 双指针① 默认字符串从状态"1"开始, 由于已经定义了状态"1",只需要循环n-1次步骤② ② 给定一个字符串,枚举每个字符j,k从j开始,找到字符j的连续区间[j,k - 1],将个数和字符j拼接到t字符串后面,j继续从k位置开始枚举 ③ 每次②操作后更新res...原创 2022-06-11 23:38:30 · 63 阅读 · 0 评论 -
16. 最接近的三数之和
原题链接:16. 最接近的三数之和 solution: 本题和三数之和很相似,在计算最接近target的时候,需要考虑大于target和小于target两种情原创 2022-06-11 21:01:44 · 70 阅读 · 0 评论 -
80. 删除有序数组中的重复项 II
原题连接:80. 删除有序数组中的重复项 II solution: 哈希表+双指针,哈希表存储元素出现的次数,如果超过2次就直接跳过,快指针遍历数组,慢指针存储数 class Solution { public: int removeDuplicates(vector<int>& nums) { unordered_map<int,int> map; int slow,fast; for(slow = 0,.原创 2022-05-27 10:53:25 · 79 阅读 · 0 评论 -
面试题 17.11. 单词距离
原题链接:面试题 17.11. 单词距离 solution: 哈希表+双指针。哈希表存储每个单词的所有位置。双指针遍历查找最近距离 class Solution { public: int findClosest(vector<string>& words, string word1, string word2) { int dist = INT_MAX; unordered_map<string, vector&...原创 2022-05-27 10:16:05 · 80 阅读 · 0 评论 -
76. 最小覆盖子串
原题链接:76. 最小覆盖子串 solution: 滑动窗口:是Leetcode 438 的升级版 438. 找到字符串中所有字母异位词_anieoo的博客-优快云博客 class Solution { public: string minWindow(string s, string t) { unordered_map<char,int> hash; unordered_map<char,int> c...原创 2022-05-19 17:23:05 · 84 阅读 · 0 评论 -
462. 最少移动次数使数组元素相等 II
原题链接:462. 最少移动次数使数组元素相等 II solution: 先排序,选择中位数进行移动。 假设一组数1 3 7 10 5,排完序后 1 3 5 7 10,中位数为5,答案ans = (5 - 1) + (3 - 1) + (7 - 5) + (10 - 5) = 13 = (10 - 1) + (7 - 3) class Solution { public: int minMoves2(vector<int>& nums) { ...原创 2022-05-19 09:59:35 · 98 阅读 · 0 评论 -
18. 四数之和
原题链接:18. 四数之和 solution: 和三数之和一个思路 class Solution { public: vector<vector<int>> fourSum(vector<int>& nums, int target) { vector<vector<int>> res; //定义返回值 sort(nums.begin(),nums.end()); ...原创 2022-05-14 14:32:49 · 103 阅读 · 0 评论 -
239. 滑动窗口最大值
原题链接:239. 滑动窗口最大值 solution: 滑动窗口模板题 i代表窗口的右端点,所以窗口的左端点的位置为i - k + 1 队列q[hh]存储的是窗口中最小值对应数组中的位置,因此一旦窗口中最小值的位置小于i - k + 1,就需要将q[hh]移除窗口 //若队尾元素的值nums[q[tt]] <= 滑动窗口的右端点nums[i],则为了维护队列q单调递减,需要删除队尾 const int N = 1e5 + 10; class Solution ...原创 2022-05-06 12:58:08 · 159 阅读 · 0 评论 -
438. 找到字符串中所有字母异位词
原题链接:438. 找到字符串中所有字母异位词 solution:滑动窗口(双指针) //注释写的很清楚了 class Solution { public: vector<int> findAnagrams(string s, string p) { unordered_map<char,int> hash; //保存目标串的种类 vector<int> res; //保存返回值 //加入目原创 2022-05-06 00:09:05 · 292 阅读 · 0 评论 -
11. 盛最多水的容器
原题链接:11. 盛最多水的容器 solution: 看到这题首先想到朴素解法,采用两重循环时间复杂度O(n^2),然而由于数据的量级愿意,发现会超时,下面附上朴素做法: class Solution { public: int maxArea(vector<int>& height) { int res = 0; //定义返回值 int n = height.size(); //有n条线 fo...原创 2022-04-22 11:04:35 · 104 阅读 · 0 评论 -
142. 环形链表 II
原题链接:142. 环形链表 II solution: 用哈希表存储 /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: ListNode *detectCycl...原创 2022-04-20 16:54:25 · 507 阅读 · 0 评论 -
160. 相交链表
原题链接:面试题 02.07. 链表相交 solution: class Solution { public: ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) { unordered_set<ListNode *> hash; ListNode *hA = headA; ListNode *hB = headB; while(hA !.原创 2022-04-19 14:37:24 · 82 阅读 · 0 评论 -
209. 长度最小的子数组
原题链接:209. 长度最小的子数组 solution: 暴力做法超时了 class Solution { public: int minSubArrayLen(int target, vector<int>& nums) { int n = nums.size(); int size = 1e5; for(int i = 0;i < n;i++){ int res = 0; ...原创 2022-04-18 14:23:10 · 158 阅读 · 0 评论 -
27. 移除元素
原题链接:27. 移除元素 solution: 暴力做法 class Solution { public: int removeElement(vector<int>& nums, int val) { int n = nums.size(); for(int i = 0;i < n;i++){ if(nums[i] == val){ //发现重复元素,开始删除 ...原创 2022-04-18 12:32:05 · 161 阅读 · 0 评论 -
1855. 下标对中的最大距离
原题链接:1855. 下标对中的最大距离 solution: 二分 class Solution { public: int binarySearch(vector<int> &nums2, int target) //返回num2数组小于等于target的第一个值的下标,如果有相同值则返回最大的 { int l = 0,r = nums2.size() - 1; while(l < r){ ...原创 2022-04-07 14:34:36 · 292 阅读 · 0 评论 -
633. 平方数之和
原题链接:633. 平方数之和 solution: 双指针 class Solution { public: bool judgeSquareSum(int c) { int s = sqrt(c); if(s * s == c) return true; for(int i = 1,j = sqrt(c);i <= c / i;i++){ while(i < j &&...原创 2022-04-06 10:50:35 · 244 阅读 · 0 评论 -
350. 两个数组的交集 II
原题链接:350. 两个数组的交集 II solution: 哈希表 class Solution { public: vector<int> intersect(vector<int>& nums1, vector<int>& nums2) { vector<int> res; //定义返回值 unordered_map<int,int> hash; ...原创 2022-04-06 10:32:06 · 123 阅读 · 0 评论 -
75. 颜色分类
原题链接:75. 颜色分类 solution: 荷兰国旗问题 class Solution { public: void sortColors(vector<int>& nums) { for(int i = 0,j = 0,k = nums.size()-1;j <= k;){ if(nums[j] == 2) swap(nums[j],nums[k]),k--; else if(nums[..原创 2022-04-04 14:18:29 · 82 阅读 · 0 评论 -
1351. 统计有序矩阵中的负数
原题链接:1351. 统计有序矩阵中的负数 solution: 暴力 class Solution { public: int countNegatives(vector<vector<int>>& grid) { int count = 0; for(int i = 0;i < grid.size();i++) for(int j = 0;j < grid[0].si...原创 2022-04-04 09:04:22 · 166 阅读 · 0 评论 -
15. 三数之和
原题链接:15. 三数之和 solution: 排序+双指针 时间复杂度(O(n^2)) class Solution { public: vector<vector<int>> threeSum(vector<int>& nums) { vector<vector<int>> res; sort(nums.begin(),nums.end()); for(int ..原创 2022-04-03 22:56:41 · 367 阅读 · 0 评论 -
2024. 考试的最大困扰度
原题链接:2024. 考试的最大困扰度 solution: 采用滑动窗口的方法解决,窗口维护的是数量较小的字符的数量长度; class Solution { public: unordered_map<char,int> hash; int maxConsecutiveAnswers(string answerKey, int k) { int n = answerKey.size(); //滑动窗口维护的是出现次数少的那个字符的数量 .原创 2022-03-29 20:50:52 · 188 阅读 · 0 评论 -
567. 字符串的排列
原题链接:567. 字符串的排列 solution: class Solution { public: bool checkInclusion(string s1, string s2) { int n1=s1.size(),n2=s2.size(); vector<int> res1(26, 0); vector<int> res2(26, 0); //定义两个vector保存字符出现的频率 ...原创 2022-03-19 13:44:32 · 252 阅读 · 0 评论 -
557. 反转字符串中的单词 III
原题链接:力扣 solution: class Solution { public: string reverseWords(string s) { int n=s.size(); for(int i=0,j=0;i<n;i++){ while(i<n && s[i]!=' ') i++; reverse(&s[j],&s[i]); j=i+.原创 2022-03-17 18:39:55 · 181 阅读 · 0 评论 -
344. 反转字符串
原题链接:力扣 solution: class Solution { public: void reverseString(vector<char>& s) { for(int i=0,j=s.size()-1;i<j;i++,j--) swap(s[i],s[j]); } };原创 2022-03-17 18:38:26 · 171 阅读 · 0 评论 -
167. 两数之和 II - 输入有序数组
原题链接:力扣 solution: class Solution { public: vector<int> twoSum(vector<int>& numbers, int target) { int n=numbers.size(); for(int i=0,j=n-1;i<n;i++){ while(i<j && numbers[i]+numbers[j]>tar原创 2022-03-16 23:25:59 · 70 阅读 · 0 评论 -
283. 移动零
原题链接 :力扣 solution: class Solution { public: void moveZeroes(vector<int>& nums) { for(int i=0,j=0; i< nums.size(); i ++){ if(nums[i] != 0 ){ if( j < i ){ nums[j] = nums[i]; ..原创 2022-03-16 23:18:03 · 131 阅读 · 0 评论 -
189. 轮转数组
原题链接:力扣 solution: 暴力做法:不满足空间复杂度O(1) class Solution { public: void rotate(vector<int>& nums, int k) { int n=nums.size(); vector<int> res(n); for(int i=0,t=0;i<n;i++){ if(i+k+1>n) t=(i+k)%..原创 2022-03-15 11:36:37 · 132 阅读 · 0 评论 -
977. 有序数组的平方
原题链接:力扣原创 2022-03-15 10:40:31 · 132 阅读 · 0 评论