js两数之和
<script>
// 输入:nums = [2,7,11,15], target = 9
// 输出:[0,1]
// 解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。
var nums = [2, 7, 11, 11, 13, 15, 18], target = 31
var result = [];
// 暴力枚举 将数组里面所有的值每个相加求出和再去匹配
var twoSum = function (nums, target) {
for (let i = 0; i < nums.length; i++) {
for (let j = i + 1; j < nums.length; j++) {
if (nums[i] + nums[j] == target) {
result[0] = i;
result[1] = j;
return result;
}
}
}
return result = [];
};
// 放在一个 map 里面
var twoSumMap = function (nums, target) {
const map = new Map();
for (let i = 0; i < nums.length; i++) {
let diff = target - nums[i]; // 目标数字-数组的每一项
// 等同于java中的containsKey
if (map.has(diff)) {
result[0] = map.get(diff);
result[1] = i;
return result;
} else {
map.set(nums[i], i);
}
}
return result = [];
};
// 使用indexOf
var twoSumIndex = function (nums, target) {
for (let i = 0; i < nums.length; i++) {
let diff = target - nums[i]; // 目标数字-数组的每一项
// !== i 是因为题目不能重复选择key值
if (nums.indexOf(diff) !== -1 && nums.indexOf(diff) !== i) {
result[0] = i;
result[1] = nums.indexOf(diff);
return result;
}
}
return result = [];
};
console.log(twoSum(nums, target));
console.log(twoSumMap(nums, target));
console.log(twoSumIndex(nums, target));
</script>
java两数之和
public class twoSum {
public static void main(String[] args) {
int nums[] = {2, 7, 11, 13, 15, 18};
int target = 31;
Solution solution = new Solution();
solution.twoSum(nums, target);
solution.twoMap(nums, target);
}
static class Solution {
// 1、双重循环 两数之和
public int[] twoSum(int[] nums, int target) {
for (int i = 0; i < nums.length; i++) {
for (int j = i + 1; j < nums.length; j++) {
if (nums[i] + nums[j] == target) {
System.out.println(Arrays.toString(new int[]{i, j}));
return new int[]{i, j};
}
}
}
return new int[0];
}
// 使用HashMap来储存
public int[] twoMap(int[] nums, int target) {
HashMap<Integer, Integer> map = new HashMap<>();
for (int i = 0; i < nums.length; i++) {
int num = nums[i];
int diff = target - num;
if (map.containsKey(diff)) {
System.out.println(Arrays.toString(new int[]{map.get(diff), i}));
return new int[]{i, map.get(diff)};
} else {
map.put(num, i);
}
}
return new int[0];
}
}
}