一道关于数组 “缓存“ 的题目

it2025-04-20  3

如题:给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出「和为目标值」的那两个整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。如下图:

一开始自己思考会想到用穷举法两个for循环遍历,找到满足条件的一对键值即可,但是这样算法复杂度太高,存在重复的工作,可以在第一次遍历过程中就对数据进行缓存。具体如下:

//方法一: var arr = [2,9,8,1,12,6,19]; function find(nums, target){ for(var i=0; i < nums.length; i++){ var half1 = nums[i]; var half2 = target - nums[i]; for(var j=i+1; j<nums.length;j++){ if(nums[j]==half2){ return [nums[i],nums[j]]; } } } } //方法二: var arr = [2,9,8,1,12,6,19]; function find(nums, target){ var cach = []; for(var i=0; i < nums.length; i++){ var half1 = nums[i]; var half2 = target - nums[i]; if(cach[half2] != undefined){ return [half1, nums[cach[half2]]]; } cach[half1] = i; } } //思路 half1 ------- half2(往后找half2) 2 ------- 7 9 ------- 0 8 ------- 1 缓存: { 20 91 82 }
最新回复(0)