JavaScript—以下执行的复杂性(forEach vs forEach indexOf)
问题陈述:-arr1是一个值为3、4和5的有序数组。在下面显示的列表中,属性“c”与数组元素属性“c”匹配的所有对象都应使用arr1处找到的索引的索引+1进行更新 我有两种不同的方法来实现相同的目标,哪一种时间复杂度更好,应该选择哪一种JavaScript—以下执行的复杂性(forEach vs forEach indexOf),javascript,foreach,time-complexity,Javascript,Foreach,Time Complexity,问题陈述:-arr1是一个值为3、4和5的有序数组。在下面显示的列表中,属性“c”与数组元素属性“c”匹配的所有对象都应使用arr1处找到的索引的索引+1进行更新 我有两种不同的方法来实现相同的目标,哪一种时间复杂度更好,应该选择哪一种 var arr1=[3,4,5]; var list=[{a:1,b:2,c:3},{a:1,b:2,c:3},{a:2,b:3,c:5},{a:3,b:4,c:4}]; 输出:[{a:1,b:2,c:1},{a:1,b:2,c:1},{a:2,b:3,c:3}
var arr1=[3,4,5];
var list=[{a:1,b:2,c:3},{a:1,b:2,c:3},{a:2,b:3,c:5},{a:3,b:4,c:4}];
输出:[{a:1,b:2,c:1},{a:1,b:2,c:1},{a:2,b:3,c:3},{a:3,b:4,c:3}];
1:查找索引,然后更新索引:
list.forEach((obj)=>{
var i=arr1.indexOf(对象c);
如果(i>-1){
目标c=i+1;
}
});
arr1.forEach((id,index)=>{
list.forEach((obj)=>{
如果(对象c==id){
对象c=指数+1;
}
})
});
哪种写作方式更好?为什么 您可以使用单个循环预先获取一个包含值和索引的值
另一个循环用于list
的所有元素,其中c
会在必要时得到更新
Map
的一个实例是一个数据结构,用于与快速访问值保持键值关系O(1)
var数组=[3,4,5],
列表=[{a:1,b:2,c:3},{a:1,b:2,c:3},{a:2,b:3,c:5},{a:3,b:4,c:4}],
值=新地图;
array.forEach(Map.prototype.set,值);
list.forEach(o=>{
如果(values.has(o.c))o.c=values.get(o.c)+1;
});
控制台日志(列表)代码>很抱歉问题中的错误-#2。m、 forEach是列表。forEach他们都是一样的。调用.indexOf()
将遍历arr1
,因此在这两种情况下,时间复杂度都是乘积arr1.length*list.length
。第二种方法的问题是,在找到与indexOf不同的匹配项后,它将访问每个索引。无论哪种方法,复杂度都是O(m*n)
。嗯,O(m*n)
和O(n*m)
但是乘法的顺序并不重要。