描述
给出一个整型数组 numbers 和一个目标值 target,请在数组中找出两个加起来等于目标值的数的下标,返回的下标按升序排列。
(注:返回的数组下标从1开始算起,保证target一定可以由数组里面2个数字相加得到)
解题思路 :
拿每个数与其之后的数进行相加,若等于目标值target则返回当前两个数
public int[] twoSum (int[] numbers, int target) {
int[] sum = new int[2];
for (int i=0;i<numbers.length;i++){
if (numbers[i] > target) continue;
for (int j=i+1;j<numbers.length;j++){
if (numbers[i]+numbers[j] == target){
sum[0] = i+1;
sum[1] = j+1;
return sum;
}
}
}
return sum;
}
也可以使用Map来实现,遍历数组,如果没有 (target - 当前值) 就将当前数字存入哈希表,如果有,返回该数字下标+之前已经存进map的值下标
public int[] twoSum(int[] nums, int target) {
Map<Integer, Integer> m = new HashMap();
for (int i = 0; i < nums.length; i++) {
if (m.get(target - nums[i]) != null) {
return new int[]{m.get(target - nums[i])+1, i+1};
}
m.put(nums[i], i);
}
return new int[]{0, 0};
}
|