方法1:直接暴力求解
// @lc code=start
//
class Solution {
public int[] twoSum(int[] nums, int target) {
int len = nums.length; //定义nums的长度
int[] ans = new int[2]; //定义答案数组
for(int i = 0;i <len;i++){
for(int j = i+1;j<len;j++){ //从i+1开始找即可
if(nums[i] + nums[j] == target){
ans[0] = i;
ans[1] = j;
}
}
}
return ans;
}
}
代码的时间复杂度是O(n2)
方法2:Hash方法
class Solution {
public int[] twoSum(int[] nums, int target) {
int ans[] = new int[2];
HashMap<Integer,Integer> hash = new HashMap<>();//定义哈希表的方法
for(int i = 0;i <nums.length;i++){
if(hash.containsKey(target - nums[i])){ //如果符合情况
ans[0] = hash.get(target - nums[i]); //因为是往后遍历的,所以第一个数字在之前了
ans[1] = i;
}
hash.put(nums[i], i); // hash的对应方法是数字对应序号
}
return ans;
}
}
时间复杂度是O(n)