目录
前言
关于 ARTS 的释义
● Algorithm: 每周至少做一个 LeetCode 的算法题
● Review: 阅读并点评至少一篇英文技术文章
● Tips: 学习至少一个技术技巧
● Share: 分享一篇有观点和思考的技术文章
一、学习的内容
为了满足活动需求,我这周特意干了以下事情:
1. 一道有关前缀后缀积的算法题
2. 一篇关于AIGC助力转型智慧图书馆的外文期刊
3. 发现了GitHub的一个很方便的小技巧
4. 分享一篇对于正在寻找实习的小伙伴一篇很不错的面试文章。
二、超时怎么办那就换种思路看题解
对于很久没刷算法的我来说,现在想要做出一道需要用到一点点小技巧的的题目我就没思路了,还得是要经常多动动脑子啊,平常还是要练一下算法囖。
就比如下面这道题目:
给你一个整数数组
nums
,返回 数组answer
,其中answer[i]
等于nums
中除nums[i]
之外其余各元素的乘积 。题目数据 保证 数组
nums
之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。请不要使用除法,且在
O(n)
时间复杂度内完成此题。
正常一般会想到的是直接两个套for循环,我第一思路就是这样,但是我也知道这样肯定对于某些案例肯定超时:但是先不管,先写了再说,源代码如下:
class Solution {
public int[] productExceptSelf(int[] nums) {
int sizes = nums.length;
int answer [] = new int [sizes];
for(int i=0;i<sizes;i++){
answer[i] = 1;
for(int j=0;j<sizes;j++){
if(j!=i){
answer[i] *= nums[j];
}
}
};
return answer;
}
}
这样运行结果就是只能通过部分案例:如下图
不过这样还能通过80%的案例是我没想到的。然后就琢磨这么样才能让时间复杂度为O(n),惨了,想不出,那就看一下大家的题解hhh,才想起来要用前缀后缀积来写,是我太笨了。
大概的逻辑过程就是使用前缀积和后缀积,然后把前缀积和后缀积相乘。例程代码如下:
class Solution {
public int[] productExceptSelf(int[] nums) {
int sizes = nums.length;
int answer [] = new int [sizes];
int prew = 1, next = 1;
for(int i=0;i<sizes;i++){
answer[i] = 1;
}
for(int i=0;i<sizes;i++){
answer[i]*=prew;
prew*=nums[i];
answer[sizes-1-i]*=next;
next*=nums[sizes-1-i];
};
return answer;
}
}
只可惜时间复杂度是O(2n),但是广义上来说也算是O(n);因此也能通过,上述代码执行过程如下:
假如 nums[] = {1,2,3,4};
i = 0: ans[0] = 1*1; prew = 1*1; ans[3] = 1*1; next = 1*4;
i = 1: ans[1] = 1*1*1; prew = 1*1*2; ans[2] = 1*1*4; next = 1*4*3
i = 2: ans[2] = 1*1*4*1*1*2; prew = 1*1*2*3; ans[1] = 1*1*1*1*4*3; next = 1*4*3*2
i = 3; ans[3] = 1*1*1*1*3*2; prew = 1*2*3*4; ans[0] = 1*1*1*4*3*2; next = 4*3*2*1
ans[0] = 1*1*1*4*3*2 = 24
ans[1] = 1*1*1*1*4*3 = 12
ans[2] = 1*1*4*1*1*2 = 8
ans[3] = 1*1*1*1*3*2 = 6
三、学习打卡成果展示
上述的题目也是可以通过了:
3.1 Github的小技巧
就是如果你有一个前端工程的话,你要是想能随时看到页面的渲染效果,但是又不想部署在服务器上,那你可以新建一个仓库,仓库命名要为.github.io结尾才可以,这样你就可以将build之后的生成的dist目录下的assets目录放到仓库里面去,那么你访问这个仓库的时候,会直接给你渲染这个工程的效果。
就比如我之前为了给同学送生日红包写的一个抽金额的案例:直接点击仓库的网址就可以使用了。非常方便!(背景图片就不要在意了哈,因为根据她的爱好来给她设置的哈哈哈
抽金额https://longstudy1.github.io/vuetest.github.io/
3.2 英文文章阅读
因为AIGC目前比较火热,所以我也找了一篇关于AIGC相关的英文文章来看,链接如下:
这篇文章主要讲的是AIGC助力图书馆转型为智能图书馆的举措和思路,旨在通过人工智能和图形计算方面的技术将图书馆实现流程自动化,增强用户体验, 提高图书使用效率和增强用户使用体验。
文中也列举了一个例子,重庆的Raffles图书馆就是一座新型的智能图书馆,采用了AR和VR等尖端技术,图书馆使用AIGC来实现图书推荐,并能根据用户行为和偏爱来进行实时建议。这也是一个是非常棒的实践。侧面说明了AIGC的大有作为,还是非常值得我们期待的。希望能运用到更多的行业里面,带给我们更多的惊喜。
3.3 一篇很不错的Java面试题博客
这篇博客我们感觉讲到的面试题都非常常见且全面,我日常也会看,可能有些知识点我们目前还没有学过,但是我觉得我们还是很有必要看一下的。
四、学习技巧的总结
通过这一周的学习,感觉面试题还是得天天看,八股文还是得看,还要算法题也是要每周最少做一道才行,不然脑子总是不好使了。然后有时间的话也可以看一些外文期刊,不仅可以提高一下我们的见识,同时也是训练我们的英语水平。总的来说还是非常nice。