leetcode #1 两数之和
暴力解法
C代码
int* twoSum(int* nums, int numsSize, int target, int* returnSize){
int i, j;
int *result = (int*)malloc(sizeof(int)*2);
*returnSize = 2; //返回两个数,故*returnSize = 2,若不写这句,输出结果会变成 ‘ ] ’。
for(i = 0; i < numsSize - 1; i++){
for(j = i + 1; j < numsSize; j++){
if(nums[i] + nums[j] == target){
result[0] = i;
result[1] =j;
return result;
}
}
}
return 0;
}
C++代码
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
int i, j;
for(i = 0; i < nums.size() - 1; i++) {
for(j = i + 1; j< nums.size(); j++) {
if(nums[i] + nums[j] == target) {
return {i,j};
}
}
}
return {};
}
};
Hash
两遍哈希
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
int i;
map<int,int> m;
for(i = 0; i < nums.size(); i++) {
m[nums[i]] = i;
}
for(i = 0; i < nums.size(); i++) {
if(m.find(target - nums[i]) != m.end() && m[target - nums[i]] != i) { //m中存在对应的key,并且不为i
return {i,m[target-nums[i]]};
}
}
return {};
}
};
一遍哈希
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
int i;
map<int,int> m;
for(i = 0; i < nums.size(); i++) {
if(m.find(target - nums[i]) != m.end()) { //m中存在对应的key
return {m[target - nums[i]], i}; //因为i为较大的元素,此时添加进去的key都还小于i,所以i在后面
}
m[nums[i]] = i; //添加
}
return {};
}
};