我又回来了,回来打卡LeetCode,第一天抄了,第二天水了,隔了大半个月我来搞第三天的卡,唉,随缘努力,工作你加加油,找找我啊。
今天做第一题:1. 两数之和
看着标得简单,我不知如何下手,脑子里只有暴力穷举,哭了,我真的是个研究生吗?大学四年学没了😭
1、自己解题,直接粗暴求解
循环套循环,确定一个数然后另一个数不断相加,判断是否等于target,若等于则结束循环。毫无技巧可言啊(这里用了C++)
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
vector<int> index(2);
int l = nums.size();
for(int i=0; i<l; i++){
for (int j=i+1; j<l; j++){ //j<i的部分在之前的循环已经进行过计算
if(nums[i]+nums[j]==target){
index[0]=i;
index[1]=j;
}
}
}
return index;
}
};
下面是这道题当时的提交结果
2、在解答区看别人解题
用到了哈希表,边循环边找,真聪明,我怎么就想不到呢,慢慢来吧,题做多了背也该背会了吧😂,这里用了Java编码。在一遍循环的过程中,同时记录了每个元素的下标和为达到目标值需要的另一个元素,一遍循环就可以完成,🐂(微软输入法这个牛的表情包着实丑了点)。
class Solution {
public int[] twoSum(int[] nums, int target) {
int[] index=new int[2];
HashMap<Integer,Integer> hash = new HashMap<Integer,Integer>();
for(int i=0; i<nums.length; i++){
if(hash.containsKey(nums[i])){
index[0] = hash.get(nums[i]);
index[1] = i;
break;
}
hash.put(target-nums[i],i);
}
return index;
}
}
以下是提交结果,性能明显提升了好多啊,不过有一说一Java真的好耗内存啊(之前从来没感觉这么明显过)