LeetCode Two Sum ——C++、Python

题目链接:Two Sum

C++

//C++
//Approach 1:Brute Force
//时间复杂度O(n^2),空间复杂度O(1)
class Solution{
public:
    vector<int> twoSum(vector<int>& nums, int target){
        vector<int> ret;
        int flag=0;
        for(int i=0; i<nums.size();i++)
        {
            for(int j=i+1;j<nums.size();j++)
                if(nums[i]+nums[j]==target)
                {
                   ret.push_back(i);
                   ret.push_back(j);
                   flag=1;
                    break;
                }
            if(flag==1)break;
        }       
        return ret;
    }
};

//Approach 2:Two-pass Hash Table
//时间复杂度O(n),空间复杂度O(n), map遍历两次
class Solution{
public:
    vector<int> twoSum(vector<int>& nums,int target){
        vector<int> ret;
        map<int,int>temp;
        map<int,int>::iterator it;
        for(int i=0;i<nums.size();i++)   //create a map
            temp.insert(pair<int,int>(nums[i],i));
        for(int i=0;i<nums.size();i++){
            it = temp.find(target-nums[i]);
            if(it!=temp.end()&&it->second!=i) //it!=temp.end() 表示 该下标存在,  it->second!=i 表示该下标不等于当前值
            {
                ret.push_back(i);
                ret.push_back(it->second);
                break;
            }
        }
        return ret;
    }
};

//Approach 3:One-pass Hash Table
//时间复杂度O(n),空间复杂度O(n), map遍历一次
class Solution{
public:
    vector<int> twoSum(vector<int>& nums, int target){
        vector<int>ret;
        map<int,int>temp;
        map<int,int>::iterator it;
        for(int i=0;i<nums.size();i++){
            it=temp.find(target-nums[i]);
            if(it!=temp.end()&&it->second!=i){
                ret.push_back(i);
                ret.push_back(it->second);
                break;
            }
            temp.insert(pair<int,int>(nums[i],i));
        }
        return ret;
    }
};

Python

#Approach 1
class Solution:
    def twoSum(self,nums: List[int], target:int) ->List[int]:
        len1 = len(nums)
        flag = 0
        for i in range(0,len1):
            for j in range(i+1,len1):
                if(nums[i]+nums[j]==target):
                    flag=1;
                    return [i,j]

#Approach 2
class Solution:
    def twoSum(self,nums: List[int], target:int) ->List[int]:
        hashtable = {value: index for index,value in enumerate(nums)}
        for index,value in enumerate(nums):
            result = target - value
            hash_index = hashtable.get(result)
            if hash_index and hash_index !=index:
                return [index,hash_index]

#Approach 3               
class Solution:
    def twoSum(self, nums: List[int], target:int)->List[int]:
        hash_table={}
        for i in range(len(nums)):
            result = target - nums[i]
            if result in hash_table.keys():

                return [i,hash_table[result]]
            else:
                hash_table[nums[i]]=i
        return 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值