1.排序数组中的两个数字之和
思路:双指针思路,一前一后,当两个值相加大于target时后指针前移,小于target时前指针后移.
2.数组中和为0的三个数
思路:先排序,三指针,先定位一个指针,其余双指针一前一后扫描,查看每次定位三数之和是否为0,前两个指针都需要排除值相同的情况,以避免查找结果相同。
3.和大于或等于k的最短子数组
思路:双指针一前一后分别指向最短子数组的首尾,先移动右指针,直到子数组大于k,然后移动左指针,直到子数组小于k,目的是寻找最短数组。
4 乘积小于k的子数组
思路:两指针一前一后分别指向子数组首尾,每次移动右指针后,如果两指针间乘积大于等于k,则移动左指针,直到,乘积小于k,此时总个数比右指针在前一位置时大right-left+1.
5.和为k的子数组
思路:右指针j向右移动,每次移动用哈希表记录前j个数字之和sum,并查看是否有从头到i的位置的数字之和为sum-k,有则说明从j+1到i的位置上数字之和为k.
6.0和1个数相同的子数组
思路:首先要吧0变为-1,从左到右遍历,并记录每个位置j,前j个数的总和对应下表j,当之后遍历到的位置前k个数之和等于前j个数之和是,说明j+1到k上的0和1相同。
7.左右两边子数组的和相等
思路:首先记录整个数组之和,从左到右遍历,若该位置左边之和等于总和减去左边之和,则返回该位置
8.二维子矩阵的数字之和
思路:先预处理一个sums二维数组,sums[i][j]表示左上角左边为(0,0)右下角坐标为(i,j)的矩阵中数字之和,因此所求矩阵等于