双指针技巧秒杀七道数组题目


1. 快慢指针技巧

1.1 原地修改数组

1.2 滑动窗口

东哥滑动窗口框架


2. 左右指针的常用算法

2.1 二分查找

东哥二分查找框架

2.2 两数之和

看下力扣第 167 题「 两数之和 II 」:

只要数组有序,就应该想到双指针技巧。这道题的解法有点类似二分查找,通过调节 left 和 right 就可以调整 sum 的大小:

int[] twoSum(int[] nums, int target) {
    // 一左一右两个指针相向而行
    int left = 0, right = nums.length - 1;
    while (left < right) {
        int sum = nums[left] + nums[right];
        if (sum == target) {
            // 题目要求的索引是从 1 开始的
            return new int[]{left + 1, right + 1};
        } else if (sum < target) {
            left++; // 让 sum 大一点
        } else if (sum > target) {
            right--; // 让 sum 小一点
        }
    }
    return new int[]{-1, -1};
}

2.3 反转数组

2.4 回文串判断