209,最新BAT大厂面试者整理的前端面试题目

{

sum=0;

for(int j=i;j<len;j++)

{

sum+=nums[j];

if(sum>=target)

{

sublen=j-i+1;

break;

}

}

result=result<sublen?result:sublen;

}

return result;

}

将result初始化结果赋值int最大值,与result=result<sublen?result:sublen;遥相呼应

如果有这种子串,则在每一次更新时,都将result返回动态的最小的子数组长度sublen

如果没有子数组满足,最终result值为sublen的0

返回0

//此语句保证了,ret能返回一个大于等于0的值

2.2、 暴力破解总结分析


一:两重for循环,变量定义前要明白变量声明之后是用来干什么的,如何巧妙地赋值

二:for循环两层,变量的位置一定要摆对。如ruguo

for(i; ; )

{

sum=0;

for(j; ; )

{

if(sum>=target)

//sum=0;

}

}

如果sum=0没有在每次一更换起始位置,即子数组的左边就将其初始化赋值0

而是在每次找到满足sum>=target满足的之后放在if里初始化,那必定出bug

如图所示,如最后 sum=4+5<11无法进入if进行初始化

再加上一个5 sum=4+5+5>11会出bug,此处属于逻辑错误。

2.3、 初识力扣中等难度题,浅谈心得


JAVA中常见的错误有三种 编译时错误(compiler error),运行时错误(runtime error),逻辑错误(logical error)逻辑错误是较难分析的,

但是每一次发现错误---->改正错误----->记得错在哪儿------>以后编程不犯错

这都是对自己能力的一种提升,

其实一开始我在if里面的break写的还是return result;

但是了解错误之后就发现这可不兴啊!宝友 ,你用一个break,纵然两层循环,写在内部,也只是断掉内层循环的当前循环,你写个return进去,不管多少层循环,满足条件直接给你终止返回破开了。岂不是直接裂开。

还有今日更文为什么要加上声明变量的理解,对一个算法题毫无头绪,不妨先把问题拆看,看看需要什么变量,什么数据结构,什么if while的判断条件,拆分成小问题,其实也有分而治之的思想。

3、小菜鸡以暴力破解浅谈力扣培养兴趣的方法

=====================

但是力扣其实简单题 无非就是 数组,链表,字符串及若干考察数学思想的题。

从数组来说

数组是很重要的数据结构且是非常重要的基础,力扣考察数组的简单题目一般在思维上都不难,主要是考察对代码的掌控能力

也就是说,想法很简单,但实现起来 可能就不是那么回事了。

首先要知道数组在内存中的存储方式,这样才能真正理解数组相关的面试题,从数组开始其实就有关于对象,引用,JVM中堆和栈的思想了,不理解的老铁可以看我之前关于数组知识的帖子。

3.1、总结


其实力扣上即使是中等题也有很大一部分可以直接暴力破解的,然后在做题的时候,不要好高骛远,先把问题拆看,看看需要什么变量,什么数据结构,什么if while的判断条件,拆分成小问题,然后尝试可不可以暴力,暴力超不超时,其实力扣上的超过多少人和时间空间复杂度的性能分析就是个小玩具,没必要刻意去追求。自己大致看一眼时o(n) 还是o(n^2)还是 o(logn)就行。

保持自己的进度,然后再进行算法的逐步优化,对复杂度精简。

4、以暴力破解简化入门双指针(滑动窗口)

====================

左指针命名r(left)

右指针命名r(right)

4.1 双指针与for的切换


变量还是那么多上述变量  一维数组其实就是一个连起来的单元格,掐头去尾就是两个指针就解决了 双指针直接节省一层循环,虽说暴力破解,唯for不破,可是双指针风骚起来,真没for循环什么事了。

4.1.1 在暴力破解中我们提到

第一层for循环中的计数器i用来更新子数组的左边起始位置

第二层for循环中的计数器j用来更新子数组的从起始位置i开始搜索,不断加一 到满足sum>=tagret然后记录最小长度,退出 本次循环 之后再由第一层for循环中的I更新起始位置。再次进行搜索

如果不满足子数组之和大于等于目标值,那就往右移动

如果满足子数组之和大于等于目标值,那就换个起点搜索,看能不能找到更短的子数组

既然这样 何不把两层 for循环中的计数器i,j换成两个指针 然后 搜索子数组

子数组大于目标值,左指针右移搜索

子数组小于目标值,左指针右移加上数字补充总和搜索

那么右指针肯定有 范围 范围就是数组长度

左指针一定小于等于右指针的位置。

核心语句就是

while(sum>=target)

{

sublen=j-i+1;//求当前子数组的长度。

sum-=sum[i++];//动态滑动窗口,左指针右移一位同时去掉原左指针指向的元素

return result<sublen?result:sublen;//动态更新要求的结果,

//将当前所求的子数组长度与目前为止最优解进行比较求最小值

}

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注前端)
img

总结

=============================================================

从转行到现在,差不多两年的时间,虽不能和大佬相比,但也是学了很多东西。我个人在学习的过程中,习惯简单做做笔记,方便自己复习的时候能够快速理解,现在将自己的笔记分享出来,和大家共同学习。

个人将这段时间所学的知识,分为三个阶段:

第一阶段:HTML&CSS&JavaScript基础

第二阶段:移动端开发技术

第三阶段:前端常用框架

  • 推荐学习方式:针对某个知识点,可以先简单过一下我的笔记,如果理解,那是最好,可以帮助快速解决问题;如果因为我的笔记太过简陋不理解,可以关注我以后我还会继续分享。

  • 大厂的面试难在,针对一个基础知识点,比如JS的事件循环机制,不会上来就问概念,而是换个角度,从题目入手,看你是否真正掌握。所以对于概念的理解真的很重要。

_convert/fc21db0a800494796dc6408ce1486031.png)

第三阶段:前端常用框架

  • 推荐学习方式:针对某个知识点,可以先简单过一下我的笔记,如果理解,那是最好,可以帮助快速解决问题;如果因为我的笔记太过简陋不理解,可以关注我以后我还会继续分享。

  • 大厂的面试难在,针对一个基础知识点,比如JS的事件循环机制,不会上来就问概念,而是换个角度,从题目入手,看你是否真正掌握。所以对于概念的理解真的很重要。

  • 21
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值