一、问题描述
翻译:
给定一个整数数组,找出其中两个数满足相加等于你指定的目标数字。
你可以假设每一个输入只有一个结果。
举例:
输入:nums=[2, 7, 11, 15], target = 9
输出:[0,1]
二、解答
1.每出现一个值x,直接在数组中寻找是否有等于(target-x)的值
1 /** 2 * @param {number[]} nums 3 * @param {number} target 4 * @return {number[]} 5 */ 6 var twoSum = function(nums, target) { 7 for (var i = 0; i < nums.length; i++) { 8 for (var j = i + 1; j < nums.length; j++) { 9 if (nums[j] == target - nums[i]) { 10 var arr=[i,j]; 11 return arr; 12 } 13 } 14 } 15 };
时间复杂度为O(n*n),空间复杂度为O(1),beats 57.50%,感觉没有办法进一步增加时间复杂度了,有点慌。
2.受到类似hash表的启发,把数组的值和序号对应起来处理。
1 /** 2 * @param {number[]} nums 3 * @param {number} target 4 * @return {number[]} 5 */ 6 //by user MarsFreewill 7 var twoSum = function(nums, target) { 8 var ans = []; 9 var map = []; 10 for (var i = 0; i < nums.length; i++) { 11 if (map[target - nums[i]] !== undefined) { 12 ans[0] = parseInt(map[target - nums[i]]) ; 13 ans[1] = i; 14 return ans; 15 } 16 map[nums[i]] = i; 17 } 18 }
时间复杂度为O(n),空间复杂度为O(n),么法,牺牲空间换时间,beats 97.22%。
时间: 2024-11-15 00:31:45