
双指针
leetcode分类
cx_cs
这个作者很懒,什么都没留下…
展开
-
165. 比较版本号
无原创 2023-03-07 11:15:00 · 44 阅读 · 0 评论 -
18. 四数之和
无原创 2022-08-18 12:15:09 · 56 阅读 · 0 评论 -
16. 最接近的三数之和
无原创 2022-08-18 12:09:34 · 83 阅读 · 0 评论 -
189. 轮转数组
要求:空间O(1),移动k位 思路:转三次 class Solution { public: void reverse(vector<int>& nums, int start, int end) { while (start < end) { swap(nums[start], nums[end]); start += 1; end -= 1; } }原创 2022-04-11 14:09:27 · 107 阅读 · 0 评论 -
42. 接雨水
要求: 思路:i处接到的雨水是它左边所有柱子最大高度和右边柱子最大高度的最小值,减去i的柱子高度 法一:动态规划,搞两个数组存左右最大高度 class Solution { public: int trap(vector<int>& height) { int n=height.size(); vector<int> leftmax(n); vector<int> rightmax(n); f原创 2022-03-18 21:55:31 · 237 阅读 · 0 评论 -
15. 三数之和
要求:rt 思路:固定一个,双指针,O(n2) class Solution { public: vector<vector<int>> threeSum(vector<int>& nums) { sort(nums.begin(),nums.end()); int n=nums.size(); vector<vector<int>> res; for(int i=0;原创 2022-03-17 16:28:25 · 92 阅读 · 0 评论 -
剑指 Offer 57 - II. 和为s的连续正数序列
要求:rt 思路:滑动窗口 class Solution { public: vector<vector<int>> findContinuousSequence(int target) { vector<vector<int>> v; vector<int> tmp; int i=1,j=2; int sum=3; while(i<j){原创 2022-03-10 12:25:25 · 62 阅读 · 0 评论 -
剑指 Offer 22. 链表中倒数第k个节点
要求:rt 思路 /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: ListNode* getKthFromEnd(ListNode* head, int k) { Li原创 2022-03-04 13:21:35 · 119 阅读 · 0 评论 -
剑指 Offer 21. 调整数组顺序使奇数位于偶数前面
要求:rt 思路:双指针 class Solution { public: vector<int> exchange(vector<int>& nums) { int i=0,j=nums.size()-1; while(i<j){ while((nums[i]&1)&&i<j)++i; while(!(nums[j]&1)&&i原创 2022-03-04 13:16:52 · 42 阅读 · 0 评论 -
524. 通过删除字母匹配到字典里最长单词
要求:给几个字符串,和s,找s中包含的字符串(按先长度后字典序),只要第一个 思路:先排序,然后双指针对应两个字符串,一个个匹配,时间最坏O(mn),空间复杂度是快排那个O(nlogn) class Solution { public: static bool cmp(string a,string b){ return a.length()!=b.length() ? a.length()>b.length() : a<b; } string findLon原创 2021-09-19 20:09:31 · 56 阅读 · 0 评论 -
141. 环形链表
要求:找无头链表的环 思路: 法一:哈希一下遍历过的指针看有无相同的,O(n),O(n) /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: bool hasCycle(ListNode原创 2021-09-19 14:37:33 · 62 阅读 · 0 评论 -
88. 合并两个有序数组
要求:合并两个非递减数组放到nums1里面,长度m和n 思路: 法一:把nums2一个个插进来,插一次后移一次,超时了fuck,时间复杂度是O(m+n)*(m+n),空间O(1) class Solution { public: void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) { int j=0; for(int i=0;i<m+j&原创 2021-09-19 13:49:53 · 71 阅读 · 0 评论 -
680. 验证回文字符串 Ⅱ
要求:判断删掉一个字符能否回文 思路:双指针,时间O(n),空间O(1) class Solution { public: bool validPalindrome(string s) { int i=0; int j=s.length()-1; int times=0; while(i<j){ if(s[i]==s[j]){ i++; j--原创 2021-09-18 09:58:48 · 77 阅读 · 0 评论 -
345. 反转字符串中的元音字母
要求:反转string中元音字母(含大写) 思路:双指针 class Solution { public: string reverseVowels(string s) { string t="aeiouAEIOU"; int i=0; int j=s.length()-1; while(i<j){ if(t.find(s[i])==string::npos){ i++;原创 2021-09-18 09:37:44 · 65 阅读 · 0 评论 -
633.平方数之和
要求:找a和b的平方和等于c,c在int范围 思路:双指针,注意溢出用减法,时间O(n),空间O(1) class Solution { public: bool judgeSquareSum(int c) { int a=0; int b=(int)sqrt(c); while(a<=b){ if(0x7fffffff-a*a<b*b||a*a+b*b>c) b--;原创 2021-09-17 13:30:25 · 67 阅读 · 0 评论 -
167.两数之和
要求:有序递增数组找出两个数满足相加之和等于目标数,假定了有唯一解 解法:双指针前后遍历:时间O(n),空间O(1) class Solution { public: vector<int> twoSum(vector<int>& numbers, int target) { int i=0; int j=numbers.size()-1; while(i!=j){ if(numbers[i]+n原创 2021-09-17 11:58:15 · 70 阅读 · 0 评论