美文网首页JavaScript 进阶营
前端面试算法题(持续更新...)

前端面试算法题(持续更新...)

作者: 终身成长人格 | 来源:发表于2019-12-02 18:31 被阅读0次

一、不借助临时变量,进行两个整数的交换

//方法一 ES6
var a = 1, b = 2;
[a,b] = [b,a];
console.log(a,b)

// 方法二 异或运算,同为0或者同为1都为0,10为1
var c = 3, d = 4;
c = c ^ d;
d = c ^ d;
c = c ^ d;
console.log(c,d)

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

例子:

a='34';b='1234567'; // 返回 2
a='35';b='1234567'; // 返回 -1
a='355';b='12354355'; // 返回 5
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;
}

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

例子:

输入 : afjghdfraaaasdenas
输出 : 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;
 
}
 
module.exports = findMaxDuplicateChar;

四、找出下列正数组的最大差值

例子:

输入 [10,5,11,7,8,9]
输出 6

答案:

function getMaxProfit(arr) {
 var minPrice = arr[0];
 var maxProfit = 0;
 
 for (var i = 0; i < arr.length; i++) {
   var currentPrice = arr[i];
 
   minPrice = Math.min(minPrice, currentPrice);
 
   var potentialProfit = currentPrice - minPrice;
 
   maxProfit = Math.max(maxProfit, potentialProfit);
 }
 
 return maxProfit;
}

五、斐波那契数列: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

六、用js实现二分查找:二分查找的前提是有序数组

例子:

将要查找的值每次与中间值比较,大于中间值,则在右边进行相同的查找,小于中间值则在左边进行比较查找,找到返回索引值,没找到返回-1。
1.非递归:

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));

2.递归:

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));

七、数组去重

方案一:

function fn(arr){
   var obj = {};
   var newArr = [];
   for(var i=0;i<arr.length;i++){
       if(!obj[arr[i]]){
           obj[arr[i]] = 1;
           newArr.push(arr[i]);
       }
   }
   return newArr;
}
var arr = [2,4,7,3,5,2,8,7];
console.log(fn(arr));

方案二:

var arr = [2,4,7,3,5,2,8,7];
var setArr = new Set(arr);
var newArr = Array.from(setArr);
console.log(newArr);

方案三:

var arr =[1,2,2,4,5,4,11,6];
function fn(arr){
   var a=arr;
   for(var i=0;i<a.length;i++){
      for(var j=a.length-1;j>i;j--){
          if(a[i]==a[j]){
               a.splice(j,1);
          }
      }
   }
   return a;
}
var s=fn(arr);
console.log(s);

配套视频课程链接:https://www.3mooc.com/front/learning/routesecond?subjectid=1232

相关文章

  • 前端面试算法题(持续更新...)

    一、不借助临时变量,进行两个整数的交换 二、字符串查找:请使用最基本的遍历来实现判断字符串 a 是否被包含在字符串...

  • 前端面试常见题(持续更新)

    一、Vue 相关问题 1、如何理解Vue? vue是一套构建用户界面的渐进式框架,核心是数据模型与组件化设计,是一...

  • 前端面试的经典题

    前端面试的经典题 前端面试三部曲 前端面试概念收集器 前端面试的经典题 前端面试的难题和怪题 Javascript...

  • 前端面试的难题和怪题

    前端面试的难题和怪题 前端面试三部曲 前端面试概念收集器 前端面试的经典题 前端面试的难题和怪题 函数 答案 Er...

  • JavaScript面试笔试题

    JavaScript前端面试 系列文章: HTML及HTTP面试笔试题CSS面试笔试题 JS一些算法题: FE-i...

  • NLP 面试题(一)和答案,附有参考URL

    面试题目的标题: 【NLP/AI算法面试必备-2】NLP/AI面试全记录(持续更新) 链接:https://zhu...

  • 前端面试的一道算法题(使用canvas解答)

    据了解,现在前端面试也喜欢考算法题了。前几天去面试,果不其然的,面试官给我四道算法题,让我自己回去做。下面说一个跟...

  • JS基础面试题——变量类型和计算

    因为最近在准备面试,所以总结了一些前端面试题供大家参考,后续会持续更新中,发出来的可能只是一些大类,一些具体的题还...

  • 前端面试概念收集器

    前端面试概念收集器 前端面试三部曲 前端面试概念收集器 前端面试的经典题 前端面试的难题和怪题 本文分为 概念,原...

  • 全栈工程师的学习资源,呕心整理

    全栈程序员的学习干货,持续更新。。包含前端,后端,微服务,DBA,运维,算法,机器学习。拿走不谢。 前端资源 1 ...

网友评论

    本文标题:前端面试算法题(持续更新...)

    本文链接:https://www.haomeiwen.com/subject/hubfgctx.html