leetcode两数之和

#include <iostream>
#include <vector>
#include <map>
#include <unordered_map>

using namespace std;

//方法一:暴力法
//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()-1;j++)
//            {
//                if(nums[i]+nums[j]==target)
//                {
//                    return {i,j};
//                }
//            }
//        }
//        return {i,j};
//    }
//};

//方法二:
//class Solution
//{
//public:
//    vector<int> twoSum(const vector<int>& nums,int target)
//    {
//        map<int,int> a;//        
//     vector<int> b(2,-1);
//存放了两个-1; // for(int i=0;i<nums.size();i++) // { // //这里把nums[i]当作键下边方便查找 // a.insert(pair<int,int>(nums[i],i));// //判断是否找到目标且目标元素不能是本身 // if(a.count(target-nums[i])>0&&(a[target-nums[i]]!=0)) // { // b[0]=i; // b[1]=a[target-nums[i]]; // break; // }// } // return b; // } //}; //方法三: //class Solution //{ //public: // vector<int> twoSum(const vector<int>& nums,int target) // { // map<int,int> a; // vector<int> b(2,-1); // for(int i=0;i<nums.size();i++) // { // //查找所有存在map中的 // if(a.count(target-nums[i])>0) // { // //因为当前的肯定是最后一个数,所以b[i]才是i // b[0]=a[target-nums[i]]; // b[1]=i; // break; // } // a[nums[i]]=i; // } // return b; // } //}; //方法四 class Solution { public: vector<int> twoSum(const vector<int>& nums,int target) { unordered_map<int,int> dict; for(int i=0;i<nums.size();i++) { if(dict.count(target-nums[i])) { return {dict[target-nums[i]],i}; } dict[nums[i]]=i; } return {}; } }; int main() { vector<int> nums={2,7,11,15}; int target = 9; Solution* getSum = new Solution; vector<int> result = getSum->twoSum(nums,target); if(!result.empty()) { cout<<result[0]<<' '<<result[1]; } }

 

posted @ 2020-06-11 17:37  AI_ON  阅读(141)  评论(0)    收藏  举报