You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python3下优化升序整数数组两数求和检测函数的极致性能方案

优化两数之和判断函数的高效实现方案

问题背景

现有如下函数代码,功能是接收一个由超大整数组成的数组,判断数组中是否存在两个不同元素之和等于指定Number并返回布尔值。由于该函数会被极多次调用,需要尽可能优化运行效率,替代嵌套循环实现:

flag = 0
for idx, i in enumerate(arr):
    for j in range(idx + 1, len(arr)):
        if i + arr[j] == Number:
            flag = 1
            break
    break
if flag == 0:
    return False
return True

补充信息(2023年8月13日)

  • 函数会被极多次调用
  • Number和arr每次调用都会变化:Number取值范围极广,arr大小通常小于sqrt(Number)且按升序排列
  • 希望在Kaggle Kernels中充分利用CPU/GPU资源提升性能

高效替代方案

1. 双指针法(排序数组最优解)

由于数组已按升序排列,双指针法是当前场景下的最优选择,时间复杂度为O(n),空间复杂度O(1),完全适配高频调用需求:

def check_two_sum(arr, Number):
    left = 0
    right = len(arr) - 1
    while left < right:
        current_sum = arr[left] + arr[right]
        if current_sum == Number:
            return True
        elif current_sum < Number:
            left += 1
        else:
            right -= 1
    return False

核心优势:

  • 无额外内存开销,内存占用极低
  • 遍历次数最少,时间开销远低于嵌套循环的O(n²)
  • 逻辑简单,CPU缓存友好,高频调用下性能表现稳定

2. 集合查找法(兼容通用场景)

如果需要兼容未排序数组的场景,集合查找法时间复杂度O(n),空间复杂度O(n),但在排序数组场景下效率略逊于双指针法:

def check_two_sum(arr, Number):
    seen = set()
    for num in arr:
        complement = Number - num
        if complement in seen:
            return True
        seen.add(num)
    return False

3. 向量化/并行优化(适配Kaggle硬件资源)

针对Kaggle的CPU/GPU资源,可以利用向量化操作或GPU加速进一步提升批量调用的吞吐量:

NumPy向量化(CPU加速)

import numpy as np

def check_two_sum_vectorized(arr, Number):
    arr_np = np.array(arr)
    # 生成所有两数之和的矩阵,排除自身相加的情况
    sum_matrix = arr_np[:, None] + arr_np[None, :]
    np.fill_diagonal(sum_matrix, -1)  # 用不可能等于Number的值覆盖对角线
    return np.any(sum_matrix == Number)

注意:此方法适合小尺寸数组,若数组较大,优先选择双指针法的向量化实现。

CuPy GPU加速

import cupy as cp

def check_two_sum_gpu(arr, Number):
    arr_cp = cp.array(arr)
    left = 0
    right = len(arr_cp) - 1
    while left < right:
        current_sum = arr_cp[left] + arr_cp[right]
        if current_sum == Number:
            return True
        elif current_sum < Number:
            left += 1
        else:
            right -= 1
    return False

说明:GPU加速适合处理极大数组或批量调用场景,需注意数据在CPU与GPU间的传输开销,避免抵消加速收益。

内容的提问来源于stack exchange,提问作者Rebel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 12:41:37