前端面试中可能遇到的算法问题
1.判断一个单词是否为回文?
所谓回文就是产生首尾回环的效果,叫做回文,也叫回环。比如 mnmnm abcba .
这其实就是考察我们对reverse的应用啦!我们可以利用函数,将字符串转换成数组在用join把他转为字符串进行比较就可判断出是不是回文了。
案例: functionfun(str) {
if(str==str.split('').reverse().join('')){
alert("是回文")
}else{
alert("不是回文")
}
}
fun("mnmnm")
2.数组去重
数组去重就是去掉一组数组中重复的数字
var arr = [1,1,2,2,3,3,4,4,5,6];
(1)先创建一个新空数组。在遍历旧数组与之比较,如果没有重复的添加到新空数组
var newArr=[];
for(var i in arr){
if(newArr.indexOf(arr[i])==-1){
newArr.push(arr[i])
}
}
document.write(newArr)
(2)遍历数组俩遍,让前一位于后一位比较,有重复的删除掉
for(var i=0;i
for(var j=i+1;j
if(arr[i]==arr[j]){
arr.splice(j,1)
j--
}
}
}
document.write(arr)
3.随机生成1-100的10个元素放入数组,
输出最大值,最大值的下标、最小值、最小值的下标、平均值和总和
var arr=[];
for (var i=0;i<10 ;i++ )
{
var sui=parseInt(Math.random()*100);
arr[i]=sui
}
document.write(arr+"
");
var arr1=arr[0];
for (var j=1;j
{
if (arr[j]>arr1)
{
arr1=arr[j]
}
}
document.write(arr1+" "+arr.indexOf(arr1)+"
")
var arr2=arr[0];
for (var j=1;j
{
if (arr[j]
{
arr2=arr[j]
}
}
document.write(arr2+" "+arr.indexOf(arr2)+"
");
var arr3=0;
for (var k=0;k
{
arr3+=arr[k]
}
document.write(arr3+" "+arr3/10)
4.排序算法
var a=[9,2,33,66,55,56,34,1,91,88];
for(var i=0;i<a.lenght;i++){
for(var j=i+1;j<a.lenght;j++){
if(a[i]>a[j]){
var tmp=a[i];
a[i]=a[j]
a[j]=tep
}
}
}
document.write(a);
5.统计一个字符串出现最多的字母
var str ="zhaochucichuzuiduodezifu";
var arr = [];//定义一个新数组
//循环遍历字符串
for(var i = 0, length = str.length; i < length; i++) {
var index = -1;
var j = 0;
//找每一个字符
do{
index = str.indexOf(str[i], index + 1);
if(index != -1) {
j++;
}
}while(index != -1);
arr[j] = str[i];//把字符串str中的字符赋给数组arr索引为j的数据,当多次循环后,会出现重复赋值的现象,
//后赋值的会把之前的赋值覆盖掉,但不影响我们找出字符出现最多的那个
}
console.log(arr);
console.log("最多的字符是"+ arr[arr.length - 1]);
console.log("次数是"+ (arr.length - 1));
6.不借助临时变量,进行两个整数的交换
这是我常用的方法
varfoo=1;bar=2;
bar=[foo,foo=bar][0];
console.log(foo);
console.log(bar);
以上是我自己的一点知识小结,如有不足,欢迎广大网友提意见