完整代码,可运行, 不断优化
C:
#include <stdio.h>
#include <stdlib.h>
int* twoSum(int* nums, int numsSize, int target)
{
int i, j;
int *result = NULL;
printf("numsSize=%d,target=%d\n", numsSize, target);
for (i = 0; i < numsSize-1; i++)
{
for (j = i + 1; j < numsSize; j++)
{
if (nums[i] + nums[j] == target)
{
result = (int*)malloc(sizeof(int) * 2);
result[0] = i;
result[1] = j;
printf("nums[i]=%d,nums[j]=%d\n", nums[i], nums[j]);
printf("result[0]=%d,result[1]=%d\n", result[0], result[1]);
return result;
}
}
}
return result;
}
int main(int argc, char *argv[])
{
int n[] = {11,2,15,7};
int target = 9;
int length = sizeof (n)/sizeof(n[0]);
printf("数组长度:%d\n", length);
int *res;
res = twoSum(n, length, target);
int resSize = sizeof(res)/sizeof(res[0]);
printf("---resSize=%d\n", resSize);
if (resSize == 2) {
printf("res=%d, %d\n", res[0], res[1]);
} else {
printf("not match\n");
}
free(res);
res = NULL;
return 0;
}
C++
#include <iostream>
#include <vector>
#include <unordered_map>
using namespace std;
vector<int> twoSum(vector<int>& nums, int target)
{
unordered_map<int, int> hashtable;
for (int i = 0; i< (int)nums.size(); ++i) {
auto it = hashtable.find(target - nums[i]);
if (it != hashtable.end()) {
return {it->second, i};
}
hashtable[nums[i]] = i;
}
return {};
}
int main(int argc, char* argv[])
{
vector<int> a = {11,2,15,7};
int target = 9;
vector<int> res;
res = twoSum(a, target);
if (res.size() == 2) {
cout << "res=" << res[0] << "," << res[1] << endl;
} else {
cout << "not match" << endl;
}
}