7. 给定一个长度为 n
的整数数组 height
。有 n
条垂线,第 i
条线的两个端点是 (i, 0)
和 (i, height[i])
。
找出其中的两条线,使得它们与 x
轴共同构成的容器可以容纳最多的水。
返回容器可以储存的最大水量。
说明:你不能倾斜容器。
思想:双指针 容量由最短板决定。 两个指针,一前一后
给你一个整数数组 nums
,判断是否存在三元组 [nums[i], nums[j], nums[k]]
满足 i != j
、i != 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 。
求在该柱状图中,能够勾勒出来的矩形的最大面积
解法一: 双指针,两层循环可解,但超复杂度