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

求基于kdb的目标和数对查找向量式编程解决方案(附Java实现)

目标和数对查找的KDB向量式实现方案

问题背景

已通过Java的HashMap容器实现目标和数对查找,但无法基于向量式编程完成KDB版本开发,现提供对应解决方案。

Java实现参考

Java代码

import java.util.HashMap;
import java.util.Map;

public class FindAllPairsOfTargetSum {

    public static void main(String[] args) {
        int arr[] = { 8, 7, 2, 5, 3, 1 };
        FindAllPairsOfTargetSum.findPairs(arr,10);
    }

    public static void findPairs(int arr[], int sum){
        Map<Integer, Integer> map = new HashMap<Integer,Integer>();
        for (int i = 0; i<arr.length;i++){
            if(map.containsKey(sum - arr[i])){
                System.out.println(" Pair is found : ("+arr[map.get(sum-arr[i])]+": "+(arr[i])+" )");
            }else{
                map.put(arr[i], i);
            }
        }
    }
}

运行结果

Pair is found : (8: 2 )
Pair is found : (7: 3 )

KDB向量式实现方案

KDB的向量式编程避免了循环,利用内置函数和数组操作高效完成任务,核心思路是通过补数匹配+索引过滤来找到符合条件的数对:

实现代码

arr: 8 7 2 5 3 1;
target: 10;

// 计算每个元素对应的补数
complements: target - arr;

// 找到每个补数在原数组中出现的位置,且位置小于当前元素的索引
matches: {where x in arr} each complements;
validIndices: where each matches < til count arr;

// 提取有效数对
pairs: flip (arr each matches . validIndices; arr where each validIndices);

// 输出结果
{println["Pair is found : (", string[x], ": ", string[y], " )"]} each pairs

代码解释

  1. 补数计算:complements: target - arr 生成每个元素对应的目标补数数组,此处得到 2 3 8 5 7 9。
  2. 匹配位置查找:{where x in arr} each complements 为每个补数找出在原数组中的所有索引位置。
  3. 索引过滤:validIndices: where each matches < til count arr 筛选出补数索引小于当前元素索引的情况,避免重复输出如(2,8)这类反向数对。
  4. 数对提取:通过数组操作提取符合条件的数对,最后循环输出结果。

运行结果

Pair is found : (8: 2 )
Pair is found : (7: 3 )

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 20:56:11