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