var format = str.match(/^(+?|-?)(\d+)$/);
if(!format){
return 0;
}
var num = 0;
var temp = format[2];
var base = 1;
var flag = format[1];
for(var i = temp.length - 1; i >= 0; i–){
num += parseInt(temp[i]) * base;
base *= 10;
}
return flag === ‘-’ ? num * (-1) : num;
}
50.在一个长度为n的数组里的所有数字都在0到n-1的范围内。数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。
function duplicate(numbers, duplication){
if(!numbers || !numbers.length){
return false;
}
var len = numbers.length;
for(var i = 0; i < len; i++){
var curr = numbers[i];
if(numbers.indexOf(curr) !== i){
duplication[0] = curr;
return true;
}
}
return false;
}
51.给定一个数组A[0,1,…,n-1],请构建一个数组B[0,1,…,n-1],其中B中的元素B[i]=A[0]A[1]…A[i-1]A[i+1]…A[n-1]。不能使用除法。
function multiply(array){
if(!array || !array.length){
return [];
}
var result = [];
var len1 = array.length, len2 = result.length;
result[0] = 1;
for(var i = 1; i < len1; i++){
result[i] = array[i - 1] * result[i - 1];
}
var temp = 1;
for(var i = len1 - 2; i >= 0;–i){
temp *=array[i + 1];
result[i] *= temp
}
return result;
}
52.请实现一个函数用来匹配包括’.‘和’‘的正则表达式。模式中的字符’.‘表示任意一个字符,而’'表示它前面的字符可以出现任意次(包含0次)。在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"abaca"匹配,但是与"aa.a"和"ab*a"均不匹配
function match(s, pattern)
{
if(s === “” && pattern === “”){
return true;
}
if(!pattern || pattern.length === 0){
return false
}
var reg = new RegExp(‘^’ + pattern + ‘$’);
return reg.test(s);
}
53.请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100",“5e2”,“-123”,“3.1416"和”-1E-16"都表示数值。但是"12e",“1a3.14”,“1.2.3”,"±5"和"12e+4.3"都不是。
function isNumeric(s){
var reg = /1?(?😦\d+)(.\d+)?|(.\d+))([eE][±]?\d+)?$/;
return reg.test(s);
}
54.请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。
function Init(){
streamNums = []; //定义一个全局变量, 不用var
streamNumsLen = 256; //定义一个全局变量, 不用var
streamNumsIndex = 0; //定义一个全局变量, 不用var
for(var i = 0; i < streamNumsLen; i++){
streamNums[i] = -1;
}
}
function Insert(ch){
var code = ch.charCodeAt();
if(streamNums[code] == -1){
streamNums[code] = streamNumsIndex;
} else if(streamNums[code] >= 0){
streamNums[code] = -2;
}
streamNumsIndex++;
}
function FirstAppearingOnce(){
result = ‘’;
var ch = ‘’;
var minIndex = Infinity;
for(var i = 0; i < streamNumsLen; i++){
if(streamNums[i] >= 0 && streamNums[i] < minIndex){
ch = String.fromCharCode(i);
minIndex = streamNums[i];
}
}
return ch == “” ? ‘#’ : ch;
}
55.一个链表中包含环,请找出该链表的环的入口结点。
/*function ListNode(x){
this.val = x;
this.next = null;
}*/
function EntryNodeOfLoop(pHead){
if(!pHead){
return null;
}
var meeting = meetingNode(pHead);
if(!meeting){
return null;
}
var nodeLoop = 1;
var node1 = meeting;
while(node1.next != meeting){
node1 = node1.next;
nodeLoop++;
}
node1 = pHead;
for(var i = 0; i < nodeLoop; i++){
node1 = node1.next;
}
var node2 = pHead;
while(node1 != node2){
node1 = node1.next;
node2 = node2.next;
}
return node1;
function meetingNode(node){
if(!node || !node.next){
return null;
}
var slow = node.next;
总结
- 对于框架原理只能说个大概,真的深入某一部分具体的代码和实现方式就只能写出一个框架,许多细节注意不到。
开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】
-
算法方面还是很薄弱,好在面试官都很和蔼可亲,擅长发现人的美哈哈哈…(最好多刷一刷,不然影响你的工资和成功率???)
-
在投递简历之前,最好通过各种渠道找到公司内部的人,先提前了解业务,也可以帮助后期优秀 offer 的决策。
-
要勇于说不,对于某些 offer 待遇不满意、业务不喜欢,应该相信自己,不要因为当下没有更好的 offer 而投降,一份工作短则一年长则 N 年,为了幸福生活要慎重选择!!!
第一次跳槽十分忐忑不安,和没毕业的时候开始找工作是一样的感受,真的要相信自己,有条不紊的进行。如果有我能帮忙的地方欢迎随时找我,比如简历修改、内推、最起码,可以把烦心事说一说,人嘛都会有苦恼的~
祝大家都有美好的未来,拿下满意的 offer。
± ↩︎