需要注意函数参数需要数组的首地址和数组大小,返回值也应该是数组的首地址
解法1.暴力解。双重循环依次遍历,时间复杂度O(n^2)。
int * getpos(int *p,int size,int sum)
{
int *q = new int[2];
for(int i = 0; i<size; i++){
for(int j = i+1;j<size;j++){
if(p[i]+p[j]==sum){
q[0] = i;
q[1] = j;
cout<<"i:"<<i<<" "<<"j:"<<j<<endl;
return q;
}
}
}
return q;
}
解法2:哈希表,先创建一个相同大小的哈希表,取出哈希表的第一个值,用和减去该值,然后哦得到差,再去表中寻找差值,找到就返回下标
int* hashtable(int *p,int size,int sum)
{
int *hash = new int[size];
int *pos = new int[2];
int *q = p;
for(int i = 0; i< size;i++){
hash[i] = q[i];
}
for(int i = 0;i < size;i++){
int temp = hash[i];
int diff = sum-temp;
for(int j = i+1;j<size;j++){
if(diff == hash[j]){
pos[0] = i;
pos[1] = j;
delete hash;
return pos;
}
}
}
return pos;
}