昨天笔试,考算法,怎么说呢?一个简单的题目,关于折半查找,我却忘记怎么写了。所以我决定开始偶尔做点算法题。关于笔试的下一篇再写,先详细研究一下。
先看牛客网的题目:
题目描述
找出元素 item 在给定数组 arr 中的位置
输出描述:
如果数组中存在 item,则返回元素在数组中的位置,否则返回 -1
示例1
输入
[ 1, 2, 3, 4 ], 3
输出
2
这个题目一看就特别简单啊,遍历数组元素,判断数组元素是否与item相等,相等,返回元素位置,否则就返回-1.我的代码如下
function indexOf(arr, item) {
var arrLength = arr.length; //储存数组的长度,以免重复使用arr.length
for(var i = 0;i < arrLength;i++){
if(arr[i] == item){
return i;
}
}
return -1;
}
然后看看别人的解法,他们会用indexOf()方法,我对JS并不是很熟悉,所以回去看了看书,顺便总结一下这个东东:EC5为数组实例添加了两个位置方法,indexOf()和lastIndexOf()方法,它们都接收两个参数:要查找的项和(可选的)表示查找起点的索引一个从开始往末尾查找,一个从末尾向前查找。
由于不是所有浏览器都支持该方法。所以回到原题,大牛们都会添加一个判断浏览器是否支持indexOf方法的语句,所以我认为最终最全面的答案是:
function indexOf(arr, item) {
if(Array.prototype.indexOf){ //判断是否浏览器是否支持indexOf()方法
return arr.indexOf(item);
}else{
var arrLength = arr.length; //储存数组的长度,以免重复使用arr.length for(var i = 0;i < arrLength;i++){ if(arr[i] == item){ return i; } }
}
return -1;}
不支持这个方法那就再用for循环嘛。。