一、C语言
已通过的代码:
int* twoSum(int* nums, int numsSize, int target) {
static int a[2];
int i,j;
for(i=0;i<numsSize-1;i++)
{
for(j=i+1;j<numsSize;j++)
{
if(nums[i]+nums[j]==target)
{
a[0]=i;
a[1]=j;
return a;
}
}
}
return 0;
}
注意点:a数组类型定义为static的原因是函数执行完毕后,a数组生命周期结束,无法在主函数中获取其返回值,定义为static可以使a生命周期扩大到整个文件,进而可以在主函数中获取其值。
复习:C语言中欲取得数组的值,还可以将数组作为指针参数、引用进行操作。如:
#include <stdio.h>
int* twoSum(int* nums, int numsSize, int target,int a[2]) {
int i,j;
for(i=0;i<numsSize-1;i++)
{
for(j=i+1;j<numsSize;j++)
{
if(nums[i]+nums[j]==target)
{
a[0]=i;
a[1]=j;
return a;
}
}
}
return 0;
}
int main()
{
int nums[4] = {2, 7, 11, 15}, target = 9,ptr[2];
twoSum(nums,4,target,ptr);
printf("%d %d\n",ptr[0],ptr[1]);
}
二、C++
已通过的代码:
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
unordered_map<int, int> mp;
vector<int> ans;
int length=nums.size();
for(int i=0;i<length;i++)
{
if(mp.count(nums[i])==0)
{
mp[target-nums[i]]=i;
}
else
{
ans.push_back(mp[nums[i]]);
ans.push_back(i);
break;
}
}
return ans;
}
};
涉及到STL中map和vector的使用,附:
#include <iostream>
#include<vector>
#include<tr1/unordered_map>
//#include <map>
using namespace std;
using namespace std::tr1;
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
unordered_map<int, int> mp;
vector<int> ans;
int length=nums.size();
for(int i=0;i<length;i++)
{
if(mp.count(nums[i])==0)
{
mp[target-nums[i]]=i;
}
else
{
ans.push_back(mp[nums[i]]);//这里要注意加入的顺序
ans.push_back(i);
break;
}
}
return ans;
}
};
int main()
{
class Solution sln;
int target = 9,a[]={2, 7, 11, 15};
vector<int> nums(a,a+4);
vector<int> r(sln.twoSum(nums,target));
for (vector<int>::iterator it = r.begin(); it != r.end(); it++)
cout << *it << endl;
cout<<"new"<<endl;
for (int i = 0; i < r.size(); i++)
cout << r.at(i) << endl;
return 0;
}
注意:在c++11以前要使用unordered_map需要
#include<tr1/unordered_map>//在unordered_map之前加上tr1库名,
using namespace std::tr1;//与此同时需要加上命名空间