interface Test {
nums: number[];
target: number;
result: number[];
}
class LeetCodeProgram_TwoSum {
/**
* 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 的那 两个 整数,并返回它们的数组下标。
*
* 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。
*
* 你可以按任意顺序返回答案。
*
*
*
* 示例 1:
*
* 输入:nums = [2,7,11,15], target = 9
* 输出:[0,1]
* 解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。
* 示例 2:
*
* 输入:nums = [3,2,4], target = 6
* 输出:[1,2]
* 示例 3:
*
* 输入:nums = [3,3], target = 6
* 输出:[0,1]
*
*
*
*
*/
private test_arr: Test[] = [
{
nums: [2,7,11,15],
target: 9,
result: [0,1],
}
{
nums: [3,2,4],
target: 6,
result: [1,2],
}
{
nums: [3,3],
target: 6,
result: [0,1],
}
]
/*
* indexOf的思路实现两数之和,未排除自身索引
*/
private function twoSum1(nums: number[], target: number): number[] {
const _length = nums.length;
for (let i: number = 0; i < _length; i++) {
const _differenceValue = target - nums[i];
const _differenceValue_index = nums.indexOf(_differenceValue);
if (_differenceValue_index !== -1) {
return [i, _differenceValue_index];
}
}
return [];
}
/*
* indexOf的思路实现两数之和,排除自身索引
*/
private function twoSum2(nums: number[], target: number): number[] {
const _length: number = nums.length;
for (let i: number = 0; i < _length; i++) {
const _differenceValue: number = target - nums[i];
const _differenceValue_index: number = nums.indexOf(_differenceValue);
if (_differenceValue_index !== -1 && _differenceValue_index !== i) {
return [i, _differenceValue_index];
}
}
return [];
}
/*
* map的思路实现两数之和,未排除自身索引
*/
private function twoSum3(nums: number[], target: number): number[] {
let map = new Map();
for(let i=0;i<nums.length;i++){
if(map.has(target-nums[i])){
return [i, map.get(target-nums[i])]
}else{
map.set(nums[i], i)
}
}
return [];
}
public function commit(funcName: string) {
this.test_arr.forEach((test: Test) => {
const {nums, target, result} = test;
const _arr = this[funcName](nums, target);
if (!!_arr.length && _arr[0] === result[0] && _arr[1] === result[1]) { // TODO: 这里要封装一个对比两数组是否相等的方法
console.log(`${funcName}与结果一致`);
} else {
console.log(`${funcName}与结果不一致`);
}
});
}
}
const leetCodeProgram_TwoSum = new LeetCodeProgram_TwoSum();
leetCodeProgram_TwoSum.commit('twoNum1');
提交记录
42 / 52 个通过测试用例
状态:解答错误
输入:
[3,2,4] 6
输出:
[0,0]
预期:
[1,2]
leetCodeProgram_TwoSum.commit('twoNum2');
提交记录
52 / 52 个通过测试用例
状态:通过
执行用时: 100 ms
内存消耗: 40 MB
leetCodeProgram_TwoSum.commit('twoNum3');
提交记录
52 / 52 个通过测试用例
状态:通过
执行用时: 84 ms
内存消耗: 40.3 MB