前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >LeetCode-1.两数之和 C++用暴力法与哈希表法分别实现

LeetCode-1.两数之和 C++用暴力法与哈希表法分别实现

原创
作者头像
扎克蕉
修改2020-07-20 10:33:37
4020
修改2020-07-20 10:33:37
举报
文章被收录于专栏:BA_NANA的文章专栏

力扣第一题

话不多说,直接贴代码

代码语言:txt
复制
#include <iostream>

#include <vector>

#include <map>

using namespace std;

/\*\*

 \* LeetCode

 \* 1.两数之和

 \* https://leetcode-cn.com/u/banana798/

 \*/

class Solution {

public:

    //暴力遍历法 时间复杂度o(n²)

    vector<int> twoSum(vector<int>& nums, int target) {

        vector<int> ans;

        for(int i=0; i<nums.size();i++){

            for(int j=i+1;j<nums.size();j++){

                if(nums[i]+nums[j]==target){

                    ans.push\_back(i);

                    ans.push\_back(j);

                }

            }

        }

        return ans;

    }



    //哈希法 时间复杂度o(n)

    vector<int> twoSum\_hash(vector<int>& nums, int target) {

        vector<int> ans;

        map<int,int>hashmap;

        for(int i=0;i<nums.size();i++){

            int tag = target - nums[i];

            if(hashmap[tag]){

                ans.push\_back(hashmap[tag]-1);

                ans.push\_back(i);

                return ans;

            }

            //防止处理value为0的情况,因为查询key是否存在时对应value会初始化为0

            hashmap[nums[i]]=i+1;

        }

    }



};





int main() {

    vector<int> nums;

    nums.push\_back(2);

    nums.push\_back(7);

    nums.push\_back(11);

    nums.push\_back(15);

    Solution solution;

    vector<int> ans = solution.twoSum\_hash(nums, 9);

    cout<<ans[0]<<" "<<ans[1];

}

注意哈希表在探测其key存不存在时,会默认初始化value为0,要避免value为0的情况

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档