决定开始刷LeetCode了,记录一下自己对每道题的理解。
Two Sum是第一题,是求一个数组中的哪两个数字加起来等于target。
1.暴力搜索。对数组中的每个元素遍历,搜索其后的元素有没有等于target-nums[i]的。
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
vector<int> answer;
for (int i=0;i<nums.size();i++){
int ansj=target-nums[i];
for (int j=i+1;j<nums.size();j++){
if (nums[j]==ansj){
answer.push_back(i);
answer.push_back(j);
break;
}
}
}
return answer;
}
};
2.运用哈希表。对数组中的每个元素进行遍历,将每个元素的值和编号插入哈希表,然后再遍历数组一遍,查找target-nums[i]的key是否存在,存在就记录结果,break。下面代码做了一点改进,只循环一次。在第一遍遍历数组的时候,先查找target-nums[i]的key是否存在,存在就记录结果,break;不存在就将当前元素的值和编号插入哈希表。
class Solution {
public int[] twoSum(int[] nums, int target) {
HashMap<Integer,Integer> m= new HashMap<Integer,Integer>();
int[] answer=new int[2];
for (int i=0;i<nums.length;i++){
if (m.containsKey(target-nums[i])){
answer[1]=i;
answer[0]=m.get(target-nums[i]);
break;
}
m.put(nums[i],i);
}
return answer;
}
}
本文介绍了LeetCode上的经典题目TwoSum的两种解决方案:暴力搜索和哈希表法。通过这两种方法,文章详细阐述了解决该问题的具体思路及实现代码。
315

被折叠的 条评论
为什么被折叠?



