前端算法题

1. 字符串查找:请使用最基本的遍历来实现判断字符串 a 是否被包含在字符串 b 中,并返回第一次出现的位置(找不到返回 -1)。

/*
 1. a='34';b='1234567'; // 返回 2
 2. a='35';b='1234567'; // 返回 -1
 3. a='355';b='12354355'; // 返回 5
 4. isContain(a,b);
*/
function isContain(a, b) {
  for (let i in b) {
    if (a[0] === b[i]) {
      let tmp = true;
      for (let j in a) {
        if (a[j] !== b[~~i + ~~j]) {
          tmp = false;
        }
      }
      if (tmp) {
        return i;
      }
    }
  }
  return -1;
}

2. 统计一个字符串出现最多的字母:给出一段英文连续的英文字符窜,找出重复出现次数最多的字母。

/*
 5. 输入: afjghdfraaaasdenas
 6. 输出: a
*/
function findMaxDuplicateChar(str) { 
 if(str.length == 1) {
  return str;
 }
 let charObj = {};
 for(let i=0;i<str.length;i++) {
  if(!charObj[str.charAt(i)]) {
   charObj[str.charAt(i)] = 1;
  }else{
   charObj[str.charAt(i)] += 1;
  }
 }
 let maxChar = '',
   maxValue = 1;
 for(var k in charObj) {
  if(charObj[k] >= maxValue) {
   maxChar = k;
   maxValue = charObj[k];
  }
 }
 return maxChar; 
}

3. 斐波那契数列:1、1、2、3、5、8、13、21。输入n,输出数列中第n位数的值。

// 方法一
function fn(n){
    var num1 = 1, num2= 1, num3 = 0;
    for(var i=0;i<n-2;i++){
        num3 = num1+num2;
        num1 = num2;
        num2 = num3;
    }
    return num3;
}
console.log(fn(7)) //13

// 方法二
function fn(n){
   if(n<=2){
        return 1;
   }
   return fn(n-1)+fn(n-2);
 }
console.log(fn(7)) //13

4. 用js实现二分查找:二分查找的前提是有序数组。

// 非递归
function binarySearch(target,arr){
    var start = 0;
    var end = arr.length-1;
    while(start <= end){
        var mid = parseInt((start+end)/2);
        if(target == arr[mid]){
            return mid
        }else if(target > arr[mid]){
            start = mid + 1;
        }else if(target < arr[mid]){
            end = mid - 1;
        }else{
            return -1;
        }
    }
}
var arr = [1,2,4,6,8,9,11,34,67];
console.log(binarySearch(11,arr));

// 递归
function binarySearch(arr,target,start,end){
    var start = start || 0;
    var end = end || arr.length-1;
    var mid = parseInt((start+end)/2);
    if(target == arr[mid]){
             return mid
         }else if(target > arr[mid]){
             start = mid + 1;
             return binarySearch(arr,target,start,end);
         }else if(target < arr[mid]){
             end = mid - 1;
             return binarySearch(arr,target,start,end);
         }else{
             return -1;
    }
}
var arr = [1,2,4,6,8,9,11,34,67];
console.log(binarySearch(arr,11));
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值