题意介绍
解题思路
- 本题为入门算法题,看到本题并不难,但是第一思路肯定是双for循环获取结果,但是需要注意[0,1]和[1,0]是一个结果集,所以在遍历时,j=i+1,即j的取值应该j>i,这样每次遍历 i 寻找结果都是在nums[j]>nums[i]中。
- 双层for循环的效率极低,所以我们考虑对其进一步的优化,采用hash表的形式存储,当目标值符合情况则取出添加到数组中。
本题代码
方法一:暴力解法
/**
*
* @param nums
* @param target
* @return
*/
public int[] getIntArray1(int[] nums, int target) {
for (int i = 0; i < nums.length - 1; i++) {
for (int j = i + 1; j < nums.length; j++) {
if (nums[i] + nums[j] == target) {
int[] s = {i, j};
return s;
}
}
}
return null;
}
方法二:通过Hash表
public int[] getIntArray2(int[] nums, int target) {
Map<Integer, Integer> map = new HashMap<>();
for (int i = 0; i < nums.length; i++) {
if (map.containsKey(target - nums[i])) {
return new int[]{i, map.get(target - nums[i])};
}
map.put(nums[i], i);
}
return null;
}