
数据结构-双指针
数据结构-双指针
tzyshiwolaogongya
这个作者很懒,什么都没留下…
展开
-
leetcode16——3Sum Closest
题目大意:在给出的数组中找出最接近于给定目标的三数之和分析:K sum问题。和leetcode1、leetcode15类似。本题思路和15一样,就是记录一下当前和与目标的差值即可,找出差值最小值即为答案。代码:#include <cmath>class Solution {public: int threeSumClosest(vector<int>& nums, ...原创 2018-04-07 16:36:33 · 162 阅读 · 0 评论 -
leetcode42——Trapping Rain Water
题目大意:给出水槽的高度数组,如图高度数组为0 1 0 2 1 0 1 3 2 1 2 1(黑色部分高度),问最多盛水量(即蓝色部分) 分析:双指针问题。左右指针l、r分别维护两侧水高度。取lr中较低的一侧继续判断水量的增加(短板原则)。 如果l侧较低,那么l右侧的水位肯定与l一样高,此时循环右移l,水量增加值为l与移动l后的高度差,直...原创 2018-04-18 16:23:50 · 197 阅读 · 0 评论 -
leetcode713——Subarray Product Less Than K
题目大意:给出一个正整数数组,求出数组中有多少个子数组,满足子数组中的乘积小于给定的k分析:双指针问题。暴力枚举肯定超时,考虑使用双指针,ij维护子数组的开始和结束,遍历数组,p维持子数组的乘积,p初始值为1,不断乘上nums[j]得到子数组的乘积,当乘积小于k时,说明从i到j满足要求,新加入的子数组个数就是j-i+1;当乘积大于等于k时,说明这个子数组已经不满足范围了,所以右移子数组的开始指...原创 2018-08-01 19:17:38 · 229 阅读 · 0 评论 -
leetcode283——Move Zeroes
题目大意:原地将数组变化成所有零在数组末尾,其余元素保持原顺序分析:双指针。方法一(自己的):zero指针指向0,non_zero指针指向zero后的第一个非零,交换两个指针并且双指针后移。循环这个过程。方法二:题目相当于要把所有非零元素移到数组前面。所以遍历数组,遇到非零元素就赋值给最后一个找到的非零元素的后一位。这样剩余的空位填0即可。代码:方法一:class ...原创 2020-03-17 10:47:04 · 112 阅读 · 0 评论 -
leetcode18——4Sum
题目大意:在给出的数组中找出四个数,使他们的和等于目标数值分析:K sum问题。和leetcode1、15、16一个类型。4sum在3sum的基础上加一层循环即可,为了提高效率,有两个小判断能剪枝(方法二)。代码:方法一:自己的做法class Solution {public:vector<vector<int>> fourSum(vector<i...原创 2018-04-07 17:20:39 · 114 阅读 · 0 评论 -
leetcode15——3Sum
题目大意:在给出的数组中找出所有三数相加和为0的数分析:K sum问题。很经典的一类题型,和leetcode1(2sum)可以对比着看。为降低复杂度,先固定答案的第一个数,然后从剩下的数中左右往中间不断查找。要注意答案不能重复,这类题要学会应用排序,本题对一开始给出的数组从小到大排序。代码:class Solution {public: vector<vector&l...原创 2018-04-07 15:58:40 · 132 阅读 · 0 评论 -
leetcode75——Sort Colors
题目大意:将给出的数组升序排序(数组中只有0、1、2三种数字)分析:排序应用。大多数排序算法也只能达到O(nlogn)的复杂度,而我们想在O(n)的复杂度内完成排序,就需要另一种方法:双指针。这道题可以使用双指针就特殊在他只有三种数字进行排序。我们设定两个指针zero和two分别指向数组最左和最右,他们分别维持着0和2的区域(也就是下一个要被放0/2的区域)。遍历数组时遇到0就放到数组左侧,遇...原创 2018-05-18 14:26:10 · 132 阅读 · 0 评论 -
leetcode88——Merge Sorted Array
题目大意:给出两个升序数组,将他们合并成一个升序数组分析:数组双指针的应用。利用好数组1后面的空余空间,每次取出两数组中的较大值存在数组1的空余空间的最后一位。代码:转载自https://www.cnblogs.com/aezero/p/4821167.htmlclass Solution {public: void merge(vector<int>&...原创 2018-06-06 18:44:34 · 146 阅读 · 0 评论 -
leetcode3——Longest Substring Without Repeating Characters
题目大意:给出一个字符串,求出最长不重复子串的长度。也就是要求子串必须连续,且子串中的字符不重复。分析:字符串和哈希表的考察。提到重复,就会想到用map或者哈希表求解。维持两个指针i和j,j不断向后遍历字符串,出现重复字符时(用set哈希表来判断是否已出现过),移动i指向j所指字符上一次出现的位置的下一个字符,这样就保证ij之间就是我们要求的不重复子串,求出这样的子串的最大值即可。代码:...原创 2018-04-03 17:03:28 · 120 阅读 · 0 评论 -
leetcode76——Minimum Window Substring
题目大意:在字符串s中找出最短子串,使他包含字符串t中的所有字符(可以不按t中字符顺序,只要包含即可)分析:哈希表、字符串考察。滑动窗口方法。将字符串t中的字符储存在哈希表中,遍历字符串s,用left和right指针维持滑动窗口左右界限,right右滑找到在t中存在的字符,该字符对应的哈希值减一,如果滑动窗口中找到的字符数量和t的长度相等就说明找到了一个答案,更新即可。代码:clas...原创 2018-05-20 10:58:14 · 180 阅读 · 0 评论 -
leetcode438——Find All Anagrams in a String
题目大意:在字符串s中找出字符串p的所有字母异位词的首字母下标(字母相同,排列不同的字符串)分析:滑动窗口双指针+哈希表。类似leetcode76。遇到子串匹配的问题基本就用滑动窗口解决。leetcode76:s中找到最短子串,使得包含p中所有字母。本题:s中找到与p长度相同的子串,使得包含p中所有字母。所以只需要再76的基础上改动,不需要维护最小长度了。当找到满足76的子串时,只需要...原创 2020-03-27 10:22:07 · 125 阅读 · 0 评论