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)。
posted @ 2022-07-27 22:30  九饼多一点  阅读(44)  评论(0)    收藏  举报