题目: 1. 两数之和
给定一个整数数组
nums
和一个整数目标值target
,请你在该数组中找出 和为目标值target
的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。
你可以按任意顺序返回答案。
解题思路
目前有两种思路解决:
1、两个for循环数组,计算数据是否为目标值,当得到结果后直接跳出循环,返回结果。
2、利用HashMap存储数据和数组下标,先判断map中是否有targe-当前值的数据,有则返回结果,没有则继续循环。
这里第二种方法在时间和空间上比第一种更好
解题过程
第一种:
class Solution {public int[] twoSum(int[] nums, int target) {int[] results = new int[2];boolean flag = false;// 循环判断for (int i = 0; i < nums.length; i++) {if (target > 0 && nums[i] > target) {continue;}if (target < 0 && nums[i] < target) {continue;}for (int j = 0; j < nums.length; j++) {if (i == j) {continue;}if (nums[i] + nums[j] == target) {results[0] = i;results[1] = j;flag = true;break;}}if (flag) {break;}}return results;}
}
第二种:
class Solution {public int[] twoSum(int[] nums, int target) {if(nums.length < 2) {return null; }HashMap<Integer, Integer> map = new HashMap<>();int[] results = new int[2];for (int i = 0; i < nums.length; i++) { // 判断map中是否有结果值if (map.containsKey(target - nums[i])) {results[0] = map.get(target - nums[i]);results[1] = i;break;}// 讲数据和下标存入mapmap.put(nums[i], i);}return results;}
}