CHUAN2 DEV ENGINE
996 正版授权研发中心 · 360 授权合作教学中心 · 抖音传奇直播合作授权 · 快手推广运营商授权
OFFICIAL LICENSED ACADEMY 查验官方授权证书 →
// 威海旷世互娱教学基地 · 技术文章
入门夯实996引擎双指针对撞搜索

【入门夯实】双指针技巧:有序数据的对撞搜索写法

2026-09-25 09:42 作者:996 技术组 996引擎Lua教程传奇脚本入门夯实996引擎Lua双指针对撞搜索

学员常见误区

从有序数组中找两个数使其之和等于目标值,学员用双层循环暴力遍历——O(n²) 在千级数据时约 50 万次比较。双指针技巧利用有序性:左指针从头、右指针从尾,和偏大移右指针、偏小移左指针,O(n) 一次遍历完成。另一个误区是忘记处理找到后指针的移动方向导致死循环。错误场景:

lua
for i = 1, #arr do
    for j = 1, #arr do
        if arr[i] + arr[j] == target then
            return i, j
        end
    end
end

千级数组 O(n²) 约 50 万次比较,效率低下。

正确姿势

双指针对撞搜索:左指针从头、右指针从尾,和偏大移右指针、偏小移左指针。规范写法。示例代码如下:

lua
local function twoSum(arr, target)
    local left, right = 1, #arr
    while left < right do
        local sum = arr[left] + arr[right]
        if sum == target then
            return left, right
        end
        if sum < target then
            left = left + 1
        else
            right = right - 1
        end
    end
    return nil
end

有序数组 { 10, 30, 50, 70, 90 } 找和为 80 的两数,双指针 3 步定位 30 加 50。

引擎验证

三步验证:有序数组 { 10, 30, 50, 70, 90 } 找和 80,返回下标 2 与 4;目标改为 200(无解)返回 nil;对 1000 条数据计时双指针与双层循环的性能差异。

举一反三

双指针的另一种用法是快慢指针检测环:快指针每次走两步、慢指针走一步,快指针追上慢指针说明有环。示例代码如下:

lua
local function hasCycle(links, start)
    local slow, fast = start, start
    while true do
        slow = links[slow]
        fast = links[links[fast]]
        if slow == nil or fast == nil then
            return false
        end
        if slow == fast then
            return true
        end
    end
end
作者履历与出处

本文由 996 技术组基于 996 引擎官方知识库与浮生梦老师课程体系整理。团队长期从事传奇类引擎 Lua 后端逻辑、客户端界面与商业版本交付,内容以官方知识库与真实项目为出处,按版本持续修订。

← 返回文章地图返回研学路径

幂尔框架 · 实战干货 · 接口调用

LATEST ARTICLES

全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →