相向双指针
两数之和
给定一个排好序的数组和一个target,返回这个数组里加起来等于target的两个数字的下标
思路
一个指针指向最大的数字,一个指针指向最小的数字,如果最大的数字加最小的数字大于target,那么右指针左移一位,如果最大数字加最小数字小于target,那么左指针右移一位,直到最大数字加最小数字等于target。
三指针遍历数组的方法
嵌套循环,第一层循环控制左指针右移,第一层循环确定左指针位置后,第二层while循环控制中间指针和右指针的移动。
核心思想
对于一个有序序列,$a_0$为最小值,$a_{k-1}$为第二大的值,$a_k$为最大值,如果最小值加上第二大的值比最大值大,那么中间所有数字加第二大的值都比最大值大,如果最小值加第二大的值比最大值小,那么最小值加上中间所有数字的值都比最大值小。根据能取得最小值和最大值的和与目标值的关系,如果大于,那么可以左移右指针,如果小于,那么可以右移左指针,最重要的是判定目标值是什么
例题
1.
给定一个包含非负整数的数组 nums
,返回其中可以组成三角形三条边的三元组个数。
2.
给你一个长度为 n
的整数数组 nums
和 一个目标值 target
。请你从 nums
中选出三个整数,使它们的和与 target
最接近。