秋招提前批来啦,然鹅…经历过春招0offer的我,依旧是一脸茫然,平时太不爱思考总结了,所以大脑有些锈了(不想承认自己一直以来的笨)。还是养成每天睡前总结的习惯来让自己回忆一天的工作,每天的坚持也能让我心里更踏实些。终于把心里想的事情搬上行程了,一起加油吧…
编程题:
变态跳台阶: ----一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。 思考: 拿到这个题目我会想当前阶数和前一阶数的关联,找到关联就能快速解题。 1个台阶f(1):1种 2个台阶f(2):2种 3个台阶f(3):1+f(1)+f(2)-------一下跳3个;第一下跳两个还剩一个= f(1);第一下跳一个还剩两个=f(2) … n个台阶f(n): 1+f(1)+f(2)+····+f(n-1)种 代码(js实现): function jumpFloorII(number) { if(number ==1) return 1; if(number === 2) return 2; let res = 1; for (let i=1;i<number;i++){ res = res+jumpFloorII(i) } return res; } 两个链表的第一个公共结点: ----输入两个链表,找出它们的第一个公共结点。 思考: 看完题目后首先想到的是两个链表遍历时长度不一样,所以先遍历两个链表,得出两个链表的长度,让长的链表先移动相差的位置,再进行同步移动判断结点是否相等。(用JS实现的这个思路的代码在本地能运行,但是没有通过牛客),后来发现了某位网友的方法,实属妙,思路是给一个链表进行标记,再遍历另一个链表查找第一个带有标记的结点。 附上网友思路的代码: function FindFirstCommonNode(pHead1, pHead2) { let p1 = pHead1; while(p1){ p1.marked = true; p1=p1.next; } let p2 = pHead2; while(p2){ if(p2.marked){ return p2; } p2=p2.next; } } 数字在排序数组中出现的次数: ----统计一个数字在排序数组中出现的次数。 思考: 这道题…拿到就直接forEach一次遍历就好了。晚上让大崔用java试了试,他竟然用了filter瞬间高级了,受教了,要在不经意间让自己的代码看起来高级些。 代码: //我的 function GetNumberOfK(data, k) { let res = 0; data.forEach(item=>{ if(item==k){ res++; } }) return res; } //大崔的(嗞~这才是程序员该有的样子) function GetNumberOfK(data, k) { return data.filter(item=>item===k).length; }第一次记录,确实挺花时间的,不早了,洗洗睡觉,明天是七月的第一天,好的开始,希望最后也是好的结局。