兩數和查詢

文章目錄


硬解

#include <iostream>
#include <vector>
using namespace std;

class Solution
{
public:
    vector<int> twoSum(vector<int> &nums, int target)
    {
        vector<int> result(2, -1);
        for (int i = 0; i < nums.size(); i++)
        {
            // i + 1,表示不用從頭開始做帶有重複的遍歷,而是後一個開始
            for (int j = i + 1; j < nums.size(); j++)
            {
                if (nums[i] + nums[j] == target)
                {
                    result[0] = i;
                    result[1] = j;
                    return result;
                }
            }
        }
        return result;
    }
};

int main()
{
    vector<int> nums = {4, 3, 2, 1};
    int target = 5;
    Solution solution;
    vector<int> result = solution.twoSum(nums, target);
    for (int i = 0; i < result.size(); i++)
    {
        // 返回nums的下標
        cout << result[i] << " ";
        // 返滬nums的下標對應的值
        // cout << nums[result[i]] << " ";
    }
    cout << endl;
    return 0;
}

使用Map

#include <iostream>
#include <vector>
#include <map>
using namespace std;

class Solution
{
public:
    vector<int> twoSum(vector<int> &nums, int target)
    {
        // 用於返回nums中對應的下標,不存在就是{-1, -1}
        vector<int> result(2, -1);
        // map,用於存儲和檢索要target-nums[i]所需的另一半的值
        map<int, int> m;

        // 遍歷nums
        for (int i = 0; i < nums.size(); i++)
        {
            // printf("search [nums[i]]%d [value]%d\n", nums[i], m.count(nums[i]));
            // 檢索map中的數據(只看key):是否存在爲num[i]的key,即該數據是否是 target-另一個nums[i] 所需的值。
            // count函數機制是返回map中某個key的出現次數,要麼是0,要麼是1(map不允許有重複的key)
            if (m.count(nums[i]))
            {
                // 返回下標:當前值nums[i]的下標
                result[0] = i;
                // 返回下標:target-此nums[i] 所需的另一半值的下標
                result[1] = m[nums[i]];
                return result;
            }
            // 插入數據到map中(只看key):將target-nums[i]所需的另一半的值作爲key, 表示當前nums[i]對應的下標i作爲value
            m[target - nums[i]] = i;
            printf("insert [key]%d [value]%d\n", target - nums[i], m[target - nums[i]]);
        }
        return result;
    }
};

int main()
{
    vector<int> nums = {4, 3, 2, 1};
    int target = 5;
    Solution solution;
    vector<int> result = solution.twoSum(nums, target);
    for (int i = 0; i < result.size(); i++)
    {
        // 返回nums的下標
        cout << result[i] << " ";
        // 返滬nums的下標對應的值
        // cout << nums[result[i]] << " ";
        
    }
    cout << endl;
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章