前端面经-关于算法的一些基础知识

1、位运算

&: 与 两个位都为1时,结果才为1
|: 或 两个位都为0时,结果才为0
^: 异或 两个位相同为0,相异为1
~: 取反 0变1,1变0
<<: 左移 各二进位全部左移若干位,高位丢弃,低位补0
'>>: 右移各二进位全部右移若干位,对无符号数,高位补0,有符号数,各编译器处理方法不一样,有的补符号位(算术右移),有的补0(逻辑右移)

2、正则表达式

在这里插入图片描述

3、排序算法

在这里插入图片描述

选择排序

概述
找到最小值下标,与最左边交换。时间复杂度O(N^2),时间复杂度O(1)

冒泡排序
概述
确定外范围边界,在用一层循环找到该次循环最大值,移到最右边。时间复杂度O(N^2),时间复杂度O(1)

4、面试中遇到的算法题

交集和并集

ES5

//交集
var c = a.filter(function(v){ return b.indexOf(v) > -1 })
//差集
var d = a.filter(function(v){ return b.indexOf(v) == -1 })
//补集 
var e = a.filter(function(v){ return !(b.indexOf(v) > -1) })
        .concat(b.filter(function(v){ return !(a.indexOf(v) > -1)}))
//并集
var f = a.concat(b.filter(function(v){ return !(a.indexOf(v) > -1)}));

ES6

var a = [1,2,3,4,5]
var b = [2,4,6,8,10]
var sa = new Set(a);
var sb = new Set(b);
// 交集
let intersect = a.filter(x => sb.has(x));
// 差集
let minus = a.filter(x => !sb.has(x));
// 补集
let complement  = [...a.filter(x => !sb.has(x)), ...b.filter(x => !sa.has(x))];
// 并集
let unionSet = Array.from(new Set([...a, ...b]));
console.log("a与b的交集:", intersect);
console.log("a与b的差集:", minus);
console.log("a与b的补集:", complement);
console.log("a与b的并集:", unionSet);

无重复字符的最长子串

var lengthOfLongestSubstring = function(s) {
    let windowArr = [];
    let max = 0;
    for (let i = 0; i < s.length; i++) {
        const existedIndex = windowArr.indexOf(s[i]);
        if (existedIndex > -1) {
        	//在位置0开始 删除数组中existendIndex个元素
            windowArr.splice(0, existedIndex + 1);
        }
        windowArr.push(s[i]);
        max = Math.max(max, windowArr.length);
    }
    return max;

};
console.log(lengthOfLongestSubstring("pwwkew"));
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值