【发布时间】:2014-02-08 21:39:50
【问题描述】:
给定一个数组,我必须找到总和等于 x 的对的索引。
假设数组是arr[5] = 1 2 3 4 2 和 sum = 5,那么对是 (1,4)、(2,3) 和 (3,2)。
我需要存储用于
的对的索引(1,4) => (0,3)
(2,3) => (1,2)
(3,2) => (2,4)
所以答案是:(0,3),(1,2),(2,4)
我正在使用哈希映射。这是我的功能:
pair<int,int> index[5];
int FindPairs(int arr[],int n, int sum) {
int i, temp,count=0,seta[n],setb[n],j;
bool hash[MAX] = {0};
for(i = 0; i < n; ++i) {
temp = sum - arr[i];
if(temp >= 0 && hash[temp] == 1 )
seta[count++] = i;
hash[arr[i]] = 1;
}
if(count == 0) return 0;
for(i=0;i<count;++i){
for(j=0;j<n;j++){
if( (sum - arr[seta[i]]) ==arr[j] ) {
setb[i] = j;
break;
}
}
}
for(i=0;i<count;++i) index[i] = make_pair(seta[i],setb[i]);
return count;
}
这里:
-
n是数组的大小, -
seta[]包含对中第一个数字的索引和 -
setb[]包含对中第二个数字的索引。
我使用O(count*n) 来计算每对的第二个数字的索引。
有没有更有效的方法来实现这一点?
【问题讨论】:
-
添加了基于语法的C++标签;如果我的猜测是错误的,请更正。
标签: c++ algorithm data-structures