双指针问题(80,82,83,84)

 7. 给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。

找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。

返回容器可以储存的最大水量。

说明:你不能倾斜容器。

 思想:双指针 容量由最短板决定。  两个指针,一前一后

 给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i != ji != k 且 j != k ,同时还满足 nums[i] + nums[j] + nums[k] == 0 。请

你返回所有和为 0 且不重复的三元组。

注意:答案中不可以包含重复的三元组。(难点所在)

思路:双指针; 先排序,后找。两层循环:外层控制循环次数及一个值不动,内层循环在这个值后面从两端(因为有序)开始找。

 

 给你一个长度为 n 的整数数组 nums 和 一个目标值 target。请你从 nums 中选出三个整数,使它们的和与 target 最接近。

返回这三个数的和。假定每组输入只存在恰好一个解。

思路  ;与上题大致相同, 主要是判断当前三个数 之和与下一个三个数之和  哪一个与target更近。三重循环超过时间。所以双指针

point:  指针k 和 j 的移动

13.给你一个由 n 个整数组成的数组 nums ,和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] (若两个四元组元素一一对应,则认为两个四元组重复):

 思路:  类似于以上两题;采用排序  后双指针的解法

 

 26. 给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 .

* 思想 :由于有序,相同的数字连续出现。 双指针法: 一快一慢,i 定位到与前面元素值相同的下标,j 找到与前面值不同的下标。若j 所指元素与前面元素值不同,则将j所指值 给i下标处,i,j同时后移;若j所指元素与前面元素值相同,i不动,j后移。

27. 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。

思想:同上题,双指针法:i,j从0开始,若是val,j+=1,知道找到!=val的值,传递给i所指位置,i,j往后移;若不是,j的值给i,j+=1,i+=1             i,j之间的位置 都是可用的

 38. 给定一个正整数 n ,输出外观数列的第 n 项.「外观数列」是一个整数序列,从数字 1 开始,序列中的每一项都是对前一项的描述。 

思想: 双指针 :  后一项  由前一项决定;由给出的n控制循环次数,后将两个指针 从前一项第一位出发,快指针在小于前一项长度的前提下,往后找与慢指针不同的字符,若相同,继续往后,若不同,则停,计算与慢指针的距离,并转换成字符串+慢指针所指元素,存入变量cur;双指针再继续往后找。  最后快指针到前一项最后位置,所形成的cur即为前一项的后一项。

 

26. 删除有序数组中的重复项 

给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。

考虑 nums 的唯一元素的数量为 k ,你需要做以下事情确保你的题解可以被通过:

  • 更改数组 nums ,使 nums 的前 k 个元素包含唯一元素,并按照它们最初在 nums 中出现的顺序排列。nums 的其余元素与 nums 的大小不重要。
  • 返回 k 。

思想  双指针问题: 去掉重复元素, 

80. 删除有序数组中的重复项 II  。

给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使得出现次数超过两次的元素只出现两次 ,返回删除后数组的新长度。

不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。

思想: 双指针问题 。快慢指针初始化放在第三个元素上,若慢指针 与前两位上的元素相同,则快指针往后找,找不同的值给当前慢指针所指元素,慢指针后移一位。

特殊在保留两个重复值

82   删除排序链表中的重复元素 II  : 给定一个已排序的链表的头 head , 删除原始链表中所有重复数字的节点,只留下不同的数字 。返回 已排序的链表 。

83.  删除排序链表中的重复元素:给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 

思想: 与上题同类型。 代码区别在于 cur指针所在位置不同。

84. 柱状图中最大的矩形。给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。

求在该柱状图中,能够勾勒出来的矩形的最大面积

 解法一: 双指针,两层循环可解,但超复杂度

  • 42
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值