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

如何在Dart/Flutter中获取列表中和为指定值的元素组合

列表两数之和匹配目标值的实现方法

针对从列表[1,2,3,4,5]中找出所有和为5的两两元素组合(结果为[[4,1],[3,2]])的需求,常用两种高效方法:

1. 哈希表(字典)法

思路

遍历列表时,用字典记录已经处理过的元素。对当前元素,计算目标值 - 当前元素的差值,如果差值存在于字典中,说明之前遍历过的某个元素能和当前元素组成符合要求的组合,直接加入结果列表。遍历完成后即可得到所有有效组合。

代码示例(Python)

def find_two_sum_pairs(nums, target):
    seen = {}
    result = []
    for num in nums:
        complement = target - num
        if complement in seen:
            result.append([num, complement])
        seen[num] = True
    return result

# 测试
nums = [1,2,3,4,5]
target = 5
print(find_two_sum_pairs(nums, target))  # 输出: [[4,1],[3,2]]

2. 双指针法

思路

先对列表排序,再用左右两个指针分别指向列表首尾:

  • 若两指针元素之和等于目标值,记录组合(按需求调整顺序),同时移动两个指针;
  • 若和小于目标值,左指针右移以增大总和;
  • 若和大于目标值,右指针左移以减小总和。
    直到左右指针相遇,即可得到所有有效组合。

代码示例(Python)

def find_two_sum_pairs(nums, target):
    nums_sorted = sorted(nums)
    left, right = 0, len(nums_sorted) - 1
    result = []
    while left < right:
        current_sum = nums_sorted[left] + nums_sorted[right]
        if current_sum == target:
            result.append([nums_sorted[right], nums_sorted[left]])
            left += 1
            right -= 1
        elif current_sum < target:
            left += 1
        else:
            right -= 1
    return result

# 测试
nums = [1,2,3,4,5]
target = 5
print(find_two_sum_pairs(nums, target))  # 输出: [[4,1],[3,2]]

方法对比

  • 哈希表法:时间复杂度O(n),空间复杂度O(n),适合对时间要求较高的场景;
  • 双指针法:时间复杂度主要由排序决定,为O(nlogn),空间复杂度O(1)(若忽略排序的额外空间),适合内存有限的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 14:22:23