leetcode Two Sum 每日一题 (。・∀・)ノ゙嗨

//two sum up
#include<iostream>
#include<map>
#include<vector>

using namespace std;
class Solution{
public:	
	vector<int> twosum(vector<int>& nums, int target){
		int i,n;
		vector<int> results;
		map<int,int> hmap;
		for(i =0;i<nums.size();i++){
			if(!hmap.count(nums[i])){
				hmap.insert(pair<int,int> (nums[i],i));
			}
			if(hmap.count(target-nums[i])){
				n = hmap[target-nums[i]];
				if(n<i){
				results.push_back(n);
				results.push_back(i);
				}
			}
		}
		return results;

	}
	
};
int main(){
	int n[] = {3,2,4};
	vector<int> nums(n,n+3);
	Solution sumT;
	vector<int> mp;
	int target;
	cin>>target;
	mp = sumT.twosum(nums,target);
	cout<<mp[0]<<endl;
	cout<<mp[1]<<endl;
	while(1);
}

//第二遍 TwoSumUp
//还是有收获的
#include<iostream>
#include<vector>
#include<map>
 using namespace std;


 class Solution{
 public:
     vector<int> twoSum(vector<int>& num,int target){
         map<int, int> enumd;
         vector<int> res;
         int i;
         for(int i = 0; i < num.size(); i++){
            //这里多了个括号所以一直有错误( ╯□╰ )
            if(!enumd.count(num[i])){
               enumd.insert(pair<int,int> (num[i],i));
            }
            //ount检查的是key
            if(enumd.count(target-num[i])){
                //加上这个条件是防止自己加自己可以得到目标值target,例如3+3=6
                if(enumd[target-num[i]]<i){
                    res.push_back(enumd[target - num[i]]);
                    res.push_back(i);
                }
            }
        }
        return res;
     }
 };
 int main(){
    int i = 0;
    int ia[] = {2,3,1,4,9};
    int target;
    vector<int> v(ia,ia+5);
    vector<int> res;
    Solution data;
    cin>>target ;
    //cout<<target<<" target "<<endl;
    res = data.twoSum(v,target);
    cout<< res[0]<<"    ==  "<<res[1]<<endl;
    while(1);
 }


使用C++的map很好用,用值做key,原序号做value。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值