相向双指针

两数之和

给定一个排好序的数组和一个target,返回这个数组里加起来等于target的两个数字的下标

思路

一个指针指向最大的数字,一个指针指向最小的数字,如果最大的数字加最小的数字大于target,那么右指针左移一位,如果最大数字加最小数字小于target,那么左指针右移一位,直到最大数字加最小数字等于target。

三指针遍历数组的方法

嵌套循环,第一层循环控制左指针右移,第一层循环确定左指针位置后,第二层while循环控制中间指针和右指针的移动。

核心思想

对于一个有序序列,$a_0$为最小值,$a_{k-1}$为第二大的值,$a_k$为最大值,如果最小值加上第二大的值比最大值大,那么中间所有数字加第二大的值都比最大值大,如果最小值加第二大的值比最大值小,那么最小值加上中间所有数字的值都比最大值小。根据能取得最小值和最大值的和与目标值的关系,如果大于,那么可以左移右指针,如果小于,那么可以右移左指针,最重要的是判定目标值是什么

例题

1.给定一个包含非负整数的数组 nums ,返回其中可以组成三角形三条边的三元组个数。

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