我正在进行JavaScript会话。在我的编码练习中找到此代码。我理解逻辑,但我没有得到这个map[nums[x]]条件。
function twoSum(nums, target_num) {
var map = [];
var indexnum = [];
for (var x = 0; x < nums.length; x++)
{
if (map[nums[x]] != null)
// what they meant by map[nums[x]]
{
index = map[nums[x]];
indexnum[0] = index+1;
indexnum[1] = x+1;
break;
}
else
{
map[target_num - nums[x]] = x;
}
}
return indexnum;
}
console.log(twoSum([10,20,10,40,50,60,70],50));
我试图从一个指定的数组中获取元素对,该数组的和等于一个特定的目标数。我已经写了下面的代码。
function arraypair(array,sum){
for (i = 0;i < array.length;i++) {
var first = array[i];
for (j = i + 1;j < array.length;j++) {
var second = array[j];
if ((first + second) == sum) {
alert('First: ' + first + ' Second ' + second + ' SUM ' + sum);
console.log('First: ' + first + ' Second ' + second);
}
}
}
}
var a = [2, 4, 3, 5, 6, -2, 4, 7, 8, 9];
arraypair(a,7);
有没有比上述两种解决方案更优化的方法?有人能解释第一种解决方案吗?这个条件到底指的是什么映射[nums[x]]?
function twoSum(arr, S) {
const sum = [];
for(let i = 0; i< arr.length; i++) {
for(let j = i+1; j < arr.length; j++) {
if(S == arr[i] + arr[j]) sum.push([arr[i],arr[j]])
}
}
return sum
}
暴力不是解决问题的最佳方式,但它确实有效。
您看到的map值是一个查找表,而twoSum方法实现了所谓的动态编程
在动态编程中,您存储计算的值,以后可以重复使用这些值来找到解决方案。
twoSum([10,20,40,50,60,70], 50)
//I removed one of the duplicate 10s to make the example simpler
值是10。我们的目标数字是50。当我在索引0中看到数字10时,我会记下,如果我在这个列表中找到一个40 (50 - 10 = 40),那么我可以在索引0中找到它的对。
所以在我们的地图上,40点对0。
值为40。我看了看地图,我的地图上看到我之前找到了一双40人的。
将返回0<这意味着我有一对40的,索引为0的
0和2配对。
现在有什么意义吗?
与解决方案中有两个嵌套循环不同,您可以存储以前计算的值。这将节省处理时间,但会在内存中浪费更多空间(因为查找表需要内存)
此外,由于您是用javascript编写的,因此您的地图可以是对象而不是数组。这也会使调试变得更容易;)
使用HashMap方法,使用时间复杂度近似O(n),下面是以下代码:
let twoSum = (array, sum) => {
let hashMap = {},
results = []
for (let i = 0; i < array.length; i++){
if (hashMap[array[i]]){
results.push([hashMap[array[i]], array[i]])
}else{
hashMap[sum - array[i]] = array[i];
}
}
return results;
}
console.log(twoSum([10,20,10,40,50,60,70,30],50));
结果:
{[10, 40],[20, 30]}
我认为代码是不言而喻的,即使你想帮助理解它,也请告诉我。我很乐意为你解释。
希望有帮助。。
在Javascript中,还有其他有效的方法来实现此任务吗? 我尝试的身份是: 这里输出:
问题内容: 给定一个数组,我们需要找到总和等于数字 X 的所有对。 例如: 问题答案: 解决方案1: 您可以检查每一对数字,并找到总和等于 X。 Java 代码: 解决方案2: 对数组进行排序 * 我们将维护两个索引,一个在开头(l=0),一个在结尾(r=n-1) * 迭代直到 l < r * 检查 arr[l] + arr[r] 是否等于 X * 如果是,则打印该对并执行 l , r– * 如果
如果给定的和等于数组中任意两个元素的和,函数需要返回true;否则函数需要返回false。
本文向大家介绍C#中数组的指定维中的元素总数,包括了C#中数组的指定维中的元素总数的使用技巧和注意事项,需要的朋友参考一下 要获取数组指定维度中的元素总数,代码如下- 示例 输出结果 这将产生以下输出- 现在让我们来看另一个示例- 示例 输出结果 这将产生以下输出-
查找数组是指从数组中查询指定位置的元素,或者查询某元素在指定数组中的位置。使用 Arrays 类的 binarySearch() 方法可以实现数组的查找,该方法可使用二分搜索法来搜索指定数组,以获得指定对象,该方法返回要搜索元素的索引值。 binarySearch() 方法有多种重载形式来满足不同类型数组的查找需要,常用的重载形式有两种。 (1) 第一种形式如下: 其中,a 表示要搜索的数组,ke
给定一个由N个元素组成的数组,找出数组的所有子集,其和等于目标值。 我已经看到了所有关于子集和的老问题,但没有一个对我有用。 输入的第一行包含数组的整数N大小 第二行包含由空格分隔的数组元素 目标和值 打印所有子数组(元素索引)。 我的代码对于小的输入工作得很好,但是对于N>150则需要很长的时间。有没有其他有效的算法可以做到这一点。请告诉我如何优化此代码以适应较大的输入。 这是我的代码 需要花费