1. Leetcode two sum 题目解析(java实现)
第一种方法:暴力解析
时间复杂度为O(n*n),两个for循环查找遍历。
class Solution {
public int[] twoSum(int[] nums, int target) {
int res[] = new int[2];
for(int i = 0;i<nums.length;i++){
for(int j = i+1;j<nums.length;j++){
if(nums[j] == target - nums[i]){
res[0]=i;
res[1]=j;
}
}
}
return res;
}
}
第二种方法:哈希映射
时间复杂度为O(n),使用哈希表建立映射,将键和值对应。这样,我们在遍历数组的时候,用target减去遍历到的数字,就是另一个需要的数字了,直接在HashMap中查找其是否存在即可,注意要判断查找到的数字不是第一个数字,比如target是6,遍历到了一个3,那么另外一个3不能是之前那个3,整个实现步骤为:一边遍历数组的查找两个相加等于target值的同时,建立HashMap映射,找到并且记录index。
import java.util.HashMap;
class Solution {
public int[] twosum(int [] nums,int target){
HashMap<Integer,Integer> m = new HashMap<Integer,Integer>();
int [] res = new int[2];
for(int i = 0;i< nums.length;i++){
if(m.containsKey(target-nums[i] )){
res [0] = i;
res [1] = m.get(target - nums[i]);
int j = res[0];
int k = res[1];
break;
}
m.put(nums[i], i);
}
return res;
}
}