写在前面
终于下定决心开始弄弄代码了,自己写的垃圾代码自己都看不下去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;
}
};
反正自己真的太菜辽
假期好好弄一弄吧..