Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 对于该算法,什么是更优化的解决方案?我觉得我可以从这个问题中学到更多_Javascript_Typescript_Algorithm - Fatal编程技术网

Javascript 对于该算法,什么是更优化的解决方案?我觉得我可以从这个问题中学到更多

Javascript 对于该算法,什么是更优化的解决方案?我觉得我可以从这个问题中学到更多,javascript,typescript,algorithm,Javascript,Typescript,Algorithm,首先,我是一个初学者,正在练习JavaScript。我对这个问题的解决方案将被公布。我认为值得一提的是,这个问题花了将近两天的时间才得以解决 问题是: 我需要写一个算法,从给定的输入数组返回模式。例如: mode([4, 5, 6, 6, 6, 7, 7, 9, 10]) ➞ [6] mode([4, 5, 5, 6, 7, 8, 8, 9, 9]) ➞ [5, 8, 9] mode([1, 2, 2, 3, 6, 6, 7, 9]) ➞ [2, 6] 解决方案: 功能调制解调器{ 让数

首先,我是一个初学者,正在练习JavaScript。我对这个问题的解决方案将被公布。我认为值得一提的是,这个问题花了将近两天的时间才得以解决 问题是: 我需要写一个算法,从给定的输入数组返回模式。例如:

mode([4, 5, 6, 6, 6, 7, 7, 9, 10]) ➞ [6]

mode([4, 5, 5, 6, 7, 8, 8, 9, 9]) ➞ [5, 8, 9]

mode([1, 2, 2, 3, 6, 6, 7, 9]) ➞ [2, 6]
解决方案:

功能调制解调器{ 让数组=[…nums] array=array.sorta,b=>a-b//从最小值对数组进行排序 //函数计算唯一的数字并作为数组返回 函数uniqueNumsarray{ 让uniques=[] 对于let i=0;ia=uniques[a] 返回结果 } 返回最高模式单向阵列,计数器阵列 }
logmode[4,4,4,6,8,9,10,10]我会将每个元素出现的次数计算到一个映射中。然后使用Math.max查找地图中的最大值,然后获取与该最大值相等的关键点:

常量模式=arr=>{ const group=新映射; 对于arr的const项{ grouped.setitem,grouped.getitem | | 0+1; } const maxCount=Math.max…grouped.values; 返回[…分组的.条目] .filter[,count]=>count==maxCount .map[键]=>键; }; console.logmode[4,5,6,6,6,7,7,9,10]//➞ [6] console.logmode[4,5,5,6,7,8,8,9,9]//➞ [5, 8, 9]
console.logmode[1,2,2,3,6,6,7,9]//➞ [2,6]一种更简单、优化的单次迭代方法

功能模式项{ var结果=[]; 变量计数={}; var最高=0; items.mapitem=>{ var itemCount=计数[项目]| | 0+1; 计数[项目]=项目计数; ifitemCount>最高{ 最高=项目数; //重置 结果=[项目]; }如果itemCount==最高,则为else{ 结果.项目; } } 返回结果; } 控制台.日志模式[2,3,9,6,9] 控制台.日志模式[2,3,2,9,6,9] 控制台.日志模式[2,3,2,9,6,9,2]
console.logmode[2,3,9,6,9,6,2]如果您将此视为一个学习练习,下面是来自CertainPerformance的同一算法的另一个实现,但编写方式完全不同

常量模式= ns, 计数=ns.减少m,n=>m.设置n,m.获取n | | 0+1,新映射, 最大值=数学。最大值。。。计数。数值 => […计数].flatMap[n,c]=>c==max?[n] :[] console.log模式[4,5,6,6,6,7,7,9,10]/=>[6] console.log模式[4,5,5,6,7,8,8,9]/=>[5,8,9]
console.log模式[1,2,2,3,6,6,7,9]/=>[2,6],如果您可以按长度对组进行排序,并得到最前面的组。您的解决方案利用了我以前没有学过的概念,这正是我希望从本文中得到的。感谢地图可能会使事情比算法严格需要的稍微复杂一些。你可以用一个普通的物体来代替,除了对象只能有字符串或符号键之外,如果您试图掌握数据结构操作,使用普通对象并在之后将键数组转换为数字数组可能会更直观一些。如果您不介意,我希望您解释一下您的最终返回语句,语法很难理解我要掌握。[…grouped.entries]给出了一个条目数组,例如[[4,1]、[5,1]、[6,3]…:每个子数组包含一个原始数字的键和该键的出现次数。按出现次数最多的项过滤,剩下[[6,3]],然后将每个子数组仅映射到该键,得到[6]。练习和回答问题。通过看体面的SO问题,你可以找到很多例子:给问题打分?我不知道,这很简单,不需要太多思考。谢谢你。我更喜欢前面的回答,因为它教会了我一些新概念,但你的代码非常适合
o:如果itemCount>1有什么意义?这似乎导致了错误。斯科特,我去掉了那个部分。谢谢