一维数组中寻找最大值
let array=[……]
1、for循环遍历
for循环是最直接的方法,但也是时间复杂度最高的方法。O(n)
1 | let array = [5, 7, 89, 2, 4] |
2、Math.max
推荐的方法,但是要注意Math.max()
对象中传递的单个参数,不能传递整个数组,此时便需要用apply方法将数据对象转化为单个参数对象。这种算法的时间负责度为多少??
1 | let array = [5, 7, 89, 2, 4] |
但是在ES6中,有一个新的API,扩展运算符…,将一个数组转为用逗号分隔的参数序列,所以上式还有一个更简单的替代apply的方法
1 | let max = Math.max(...array) |
顺便可以区分一下apply、call、bind之间的区别。
call传递的是单个参数:call(this,arg1,arg2,arg3...)
apply可以传递的是一个数组: apply(this,arguments[])
bind只传递一个对象:bind(this)
3、Array.sort()排序之后再取最后一位
这个办法的时间复杂度就是视具体浏览器JS引擎以及数组长度而定了。
1 | let array = [5, 7, 89, 2, 4] |
一维数组寻找重复率最高的元素
使用hash
让object.key=元素,value=出现次数,遍历对象,找到value中最大值,然后将对应的key值返回就好了
1 | //找出数组中出现最多的元素 |
使用空间换时间
找到找到字符串中出现频率最高的字符
这个问题和在数组中寻找出现频率最高的元素其实是同一个问题,区别在于,一个是字符,一个是数组。遍历的方式不一样而已。
对于for循环遍历,字符串具有length属性,上面的方法完全适用。