双指针
Wade_Gao
这个作者很懒,什么都没留下…
展开
-
LeetCode-18:四数之和
一、题目描述二、解题思路三数之和会了,这道题就会了。还是先排序,做去重复的初步准备其实也就是三数之和外层再套一个遍历而已但是不能直接就在nums[i]>targetnums[i]>targetnums[i]>target就返回,因为这个targettargettarget是人家任意指定的,有可能比数组里最小的还小,三数之和里人家指定了就是000,这块有点不同,否则会被卡用例:三、解题代码class Solution {public: vector<vec原创 2020-10-13 23:12:28 · 218 阅读 · 0 评论 -
LeetCode-15:三数之和
一、题目描述二、解题思路首先,题目要求不能包含重复的三元组,所以要想到通过排序选择三元组的方法来去重;对排序数据进行遍历如果nums[a]>0nums[a] > 0nums[a]>0,后面的元素都比nums[a]nums[a]nums[a]大,不可能三数之和为000,直接返回重复元素跳过,避免重复左指针L=a+1L=a+1L=a+1,右指针R=size−1R = size - 1R=size−1:相当于固定一个元素,去凑另两个若和大于000:说明太大了,右指针左移若和原创 2020-10-13 22:39:51 · 173 阅读 · 0 评论 -
浙大版《数据结构(第2版)》题目集习题3.11 表达式转换 (25分)
一、题目描述算术表达式有前缀表示法、中缀表示法和后缀表示法等形式。日常使用的算术表达式是采用中缀表示法,即二元运算符位于两个运算数中间。请设计程序将中缀表达式转换为后缀表达式。输入格式:输入在一行中给出不含空格的中缀表达式,可包含+、-、*、\以及左右括号(),表达式不超过20个字符。输出格式:在一行中输出转换后的后缀表达式,要求不同对象(运算数、运算符号)之间以空格分隔,但结尾不得有多余空格。输入样例:2+3*(7-4)+8/4输出样例:2 3 7 4 - * + 8 4 / +二、解原创 2020-07-06 22:22:39 · 1432 阅读 · 0 评论 -
浙大版《数据结构(第2版)》题目集最长连续递增子序列 (20分)
一、解题思路采用双指针法,就像切割字符串一样,来处理这个序列。首先定义一对前后指针left和right,分别表示本递增区间的起始位置和终止位置然后定义一个slnStart,来确定当前最优解(当前找到的最长递增序列)的起始位置定义一个maxLength,其含义为当前找到的最长长度,设置初始值为1,意思是即使向量全逆序,也至少要输出一个元素然后呢,挨个扫描向量的元素,查看下一个元素是不是递增的,直到找到本递增区间的终止位置然后,根据得到的left和right值,就可以确定这个递增区间的长度,位ri.原创 2020-07-04 23:22:35 · 466 阅读 · 0 评论 -
PTA数据结构与算法题目集(中文)-6-7: 在一个数组中实现两个堆栈
一、题目描述本题要求在一个数组中实现两个堆栈。函数接口定义:Stack CreateStack( int MaxSize );bool Push( Stack S, ElementType X, int Tag );ElementType Pop( Stack S, int Tag );其中Tag是堆栈编号,取1或2;MaxSize堆栈数组的规模;Stack结构定义如下:typedef int Position;struct SNode { ElementType *Data;原创 2020-05-11 01:11:12 · 326 阅读 · 0 评论 -
LeetCode-3:无重复字符的最长子串
一、题目描述二、解题思路采用一个Hash表,记录出现的频次,再采用一个last数组,当检查到某一位字母重复出现时,记录该字母上次出现的地方。之所以要保存上次出现的位置,看下面的例子:"AKVFWCEMCNBguywesgfceuyr3275468372trgcoiwgyagaoeufcageoGIC"我们第一次查重,会找到第八位C在之前出现过,那么我们需要将l右移,但是不能直接移动到r处...原创 2020-05-02 15:45:40 · 106 阅读 · 0 评论