leetcode练习1

写在前面

终于下定决心开始弄弄代码了,自己写的垃圾代码自己都看不下去orz。

这学期绩点实在是凉的很,专业课和数学都难看得要死,保研彻底没啥希望了,出国也很困难。本来想的这学期追一追下学期再努努力还可以拼一下运气,结果全部落空了。反正也是怪自己,明知道这学期绩点很重要还是很浮躁不听课,也算是自作自受。本来想要么就直接去考研吧,以后几个学期绩点随便搞一搞不挂就行,想了很久下学期还是尽全力挣扎一下,要不然之前的准备实在是都白费了,即使最后不行也算尽力了不会后悔。

所以这个假期和下个学期就两件事:抓紧一切时间弄代码,早睡早起好好听课刷绩点

说回正题,今天做了leetcode1,真的不咋会用leetcode,习惯了code blocks再看它特费劲,大括号打的真难受

题目:

给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。

你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。

示例:

给定 nums = [2, 7, 11, 15], target = 9

因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]

第一反应是暴力搜索(也大概是唯一反应...)

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
      vector<int> a;
            a.push_back(-1);
            a.push_back(-1);
            for(int i=0;i<nums.size();i++)
            {
                        for(int j=i+1;j<nums.size();j++)
                         if(nums[i]+nums[j]==target) 
                        {
                              a[0]=i;
                              a[1]=j;
                              return a;
                        }
        
        }
       return {};
    }
    
};

请忽略我谜一样的排版...开始vector没有初始化,return没有返回空值,实在卡了半天。

又少打了一个大括号,又卡了半天,最后果然速度很慢,而且要是数组中有好几组就不行了

看答案有人写了哈希,感觉用的很巧妙~

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) 
    {
        vector<int> res;
        unordered_map<int,int> hash;
        for(int i=0;i<nums.size();i++){
            int aim = target - nums[i];
            int local = hash[aim];
            if(local!=NULL){
                res.push_back(local-1);
                res.push_back(i);
                return res;
            }
            else{
                hash[nums[i]] = i+1;
            }
        }
        return res;
    }
};

反正自己真的太菜辽

假期好好弄一弄吧..

猜你喜欢

转载自blog.csdn.net/Young_Li_1117/article/details/86552524