leetcode 力扣 hot100 两数之和
暴力破解:
int* twoSum(int* nums, int numsSize, int target, int* returnSize){
int num = 0,i = 0, j = 0;
* returnSize = 0;
for(i=0 ; i<numsSize ; i++)
{
num = target - *(nums + i);
for(j=i+1 ; j<numsSize ;j++)
{
if(num == *(nums + j))
{
nums[0] = i;
nums[1] = j;
*returnSize = 2;
return nums;
}
}
}
return nums;
}
哈希查找:
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
map<int,int> HashMap;
vector<int> ReturnVector(2,0);
for(int i=0; i < nums.size() ;i++)
{
if(HashMap.count(target - nums[i]) == 1)
{
ReturnVector[0] = i;
ReturnVector[1] = HashMap[target - nums[i]];
break;
}
HashMap[nums[i]] = i;
}
return ReturnVector;
}
};
哈希查找参考了leetcode题解。HashMap[nums[i]] = i;放在判断之后是为了防止target - nums[i] 和nums[i]本身相等的情况。放在后面就只会查找除了自己本身以外的值。
学习了额外的知识:
vector:相当于更厉害的数组。
map:提供一对一的hash映射,第一个可以称为关键字(key),每个关键字只能在map中出现一次,第二个可以称为该关键字的值(value)。

浙公网安备 33010602011771号