Leetode 1 - 两数之和 - Python & C++

   区块链实验告一段落,信号与系统和数据库实验还不那么着急,学了半个月一款自研游戏编辑器感到自己只适合打游戏不适合做游戏,刷了一周末手机,最终决定停止摆烂,开始刷算法,回归大一青春生活(bushi) 。想当年C语言上课老师不咋讲,我也没咋听,全靠做题学语言hhh。
   今天先从新手村第一题开始。

题目如上
这道题有两种思路,一是暴力循环,二是哈希表空间换时间。

1.暴力循环

根据题意,就是要找两个数使其和为目标值。
那只要两层循环就遍历完了。
最坏情况(n,2)(这是组合数的意思),复杂度O(N^2)。

1.1 Python

class Solution(object):
    def twoSum(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: List[int]
        """
        for i in range(0,len(nums)):
            for j in range(i+1,len(nums)):
                if nums[i]+nums[j]==target:
                    return [i,j]
                else:
                    continue

Python暴力循环结果

1.2 C++

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        int i=0;
        int j=0;
        //此处定义后result里的值为0
        vector<int> result(2);
        for(i=0;i<nums.size();i++){
            for(j=i+1;j<nums.size();j++){
                if (nums[i]+nums[j]==target){
                    result[0]=i;
                    result[1]=j;
                    return result;
                }
                else{
                    continue;
                }
            }
        }
        return result;
    }
};

在这里插入图片描述
可见C++确实比Python快。

2.哈希表

令nums里的值为key,下标为value创建哈希表。
算目标值与nums[j]的差,若差在哈希表键值里,则返回其对应的value,即下标值。

2.1 Python

class Solution(object):
    def twoSum(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: List[int]
        """
        index=[i for i in range(len(nums))]
        #创建哈希表,nums为键,index为值
        hashmap=dict(zip(nums,index))
        for j in range(0,len(nums)):
            diff=target-nums[j]
            if diff in hashmap and j!=hashmap.get(diff):
                return [hashmap.get(diff),j]

在这里插入图片描述
速度上快了不少,内存也多了不少。

2.2 C++

其实我没学过C++,练算法的同时学C++。

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        int i=0;
        int j=0;
        vector<int> result(2);
        std::map<int,int> hashMap;
        for(i=0;i<nums.size();i++){
            hashMap[nums[i]]=i;
        }
        for(i=0;i<nums.size();i++){
            int diff=target-nums[i];
            if (hashMap.count(diff)&&hashMap[diff]!=i){
                result[0]=i;
                result[1]=hashMap[diff];
            }
        }  
        return result;
    }
};

在这里插入图片描述
时间快了一些,内存多了不少。看结果我的代码果然还是太烂了。没关系,每日一题,慢慢进步。哦其实也可以写个go版本的,但是好像go语言用处不多,目前的思路是用python练算法,再对着算法练C++。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值