跳至主要內容
单调队列与单调栈

双指针(Two Pointers)是一种常用的数组、链表遍历技巧,利用两个指针在序列上移动,解决区间、子串、去重等问题。

常见应用场景

  • 有序数组的两数之和/三数之和
  • 快慢指针判断链表有环
  • 滑动窗口求子数组/子串问题
  • 原地去重、反转、合并等

典型算法1:有序数组的两数之和

给定有序数组 nums 和目标值 target,返回两个数的下标使其和为 target。

代码示例(Python):

def twoSum(nums, target):
    left, right = 0, len(nums) - 1
    while left < right:
        s = nums[left] + nums[right]
        if s == target:
            return [left, right]
        elif s < target:
            left += 1
        else:
            right -= 1

KSJ大约 3 分钟算法
贪心算法的正确性

贪心算法(Greedy Algorithm)是一类在每一步都做出当前最优选择,期望通过局部最优达到全局最优的算法。

正确性判定的核心思想

贪心算法并不总是正确,只有满足特定条件时才可用。判断贪心算法正确性的常用方法有:

1. 最优子结构

  • 问题的最优解包含其子问题的最优解。
  • 例:最短路径、区间调度。

2. 无后效性

  • 某一步的选择不会影响后续状态,只与当前状态有关。
  • 例:活动选择问题。

3. 贪心选择性质


KSJ大约 2 分钟算法