写点什么

ARTS-week-1

用户头像
youngitachi
关注
发布于: 2020 年 05 月 30 日

1. Algorithm

189. Rotate Array (Easy)

好久没做算法题了,先从easy找找手感。

问题描述:

给定一个数组,计算整个数组往右位移k位后的结果。移动为循环移动,即最右边的一位会移动到最左边。k >= 0,1 <= 数组长度 <= 2 * 10^4

这个题的解法之前就知道,稍微思考了下,就知道应该使用reverse数组来做。步骤为:

  1. 先reverse整个数组

  2. reverse [0, k - 1]

  3. reverse [k, n - 1]

其中n为数组长度。

通过的代码如下:

class Solution {
public:
void rotate(vector<int>& nums, int k) {
if (k > nums.size()) {
k = k % nums.size();
}
reverse(nums, 0, nums.size() - 1);
reverse(nums, 0, k - 1);
reverse(nums, k, nums.size() - 1);
}
void reverse(vector<int>& nums, int start, int end) {
int i = start, j = end;
while (i < j) {
int t = nums[i];
nums[i] = nums[j];
nums[j] = t;
i++; j--;
}
}
};



尽管注意验证了k = 0时的情况,奈何还是忘了考虑k > n时的情况。因此第一次RE了。注意到这种情况之后,增加了对k的判断。

反思:注意边界情况基本上是做算法题或者说编程都必须要考虑的情况,而实际上我在做的时候确实每次都考虑得非常浅,对于这种练习题,由于可以知道错误时的输入数据,自然可以分析出代码错误的原因,而实际上即便不追求竞赛,通过直接阅读代码,或者分析题目时就看出代码中隐藏的bug的能力还是需要锻炼的,至少自己在测试时,考虑到k > n的情况,然后自测出代码的bug。



2. Review

有点不知道优质的英文文档去哪里找,索性直接读些英文书吧。就从Spring In Action 5th开始吧。从头开始读,本次阅读的是1.1~1.2节。首先自然是简单介绍了DI,以及配置bean的三种方式:

  • xml配置

  • Java代码配置

  • 注解配置

毫无疑问,现在注解配置是主流。

然后介绍了使用Spring Tool Suit生成Spring项目。并以生成的一个Maven项目为例,讲解了pom.xml里面的一个内容。比较有意思的是,项目本身是一个Web项目,但是他在里面配置的package是JAR,愿配置如下:



<packaging>jar</packaging>

可能会比较疑惑,Web项目一般不是打成WAR包部署到Tomcat这样的服务器里吗,为什么这里会打成JAR包呢?书里给出了答案:

The choice of JAR packaging is a cloud-minded choice. Whereas WAR files are perfectly suitable for deploying to a traditional Java application server, they’re not a natural fit for most cloud platforms. Although some cloud platforms (such as Cloud Foundry) are capable of deploying and running WAR files, all Java cloud platforms are capable of running an executable JAR file. Therefore, the Spring Initializr defaults to JAR packaging unless you tell it to do otherwise.

说白了,就是考虑到云平台,JAR包通用型更好。

3. Tips

学习技巧,个人觉得为了平常用得上,不妨试试Linux命令,均从极客时间的《Linux实战技能100讲》中学习。

ls命令,此次学习到的新的地方在于:

  1. 可以同时查看多个目录下的文件,每个目录以空格隔开即可

  2. -r参数逆序显示内容

  3. -t按照时间顺序显示(默认文件名)

  4. -R递归显示子目录下的所有文件

4. Share

分享今天在得到上看的熊逸老师讲透资治通鉴的第26课“封国该给弟弟还是儿子”里的一段话:

这个时候,先天差距就会格外凸显出来,就像一个班里,当每个同学都悬梁刺股拼上老命的时候,能够一锤定音的就只有天赋和运气了。

看到这段话,难免有些令人丧气,似乎对于天赋不好的人来说,努力也没多大作用了。但是反过来一想,或许作为天赋不好一份子,我似乎该庆幸并不是每个人都真的会悬梁刺股拼上老命的努力;而更加需要注意的是,倘若我不去努力或者不够努力,或许连不努力的聪明人都追赶不上,更不用说那些真正聪明懂得努力的重要性的人了。结论虽然残酷,但是能改变结果的,或许不止是天赋和运气。

用户头像

youngitachi

关注

还未添加个人签名 2018.08.22 加入

还未添加个人简介

评论 (1 条评论)

发布
用户头像
目前来看投入的时间并不算多,但是投入量并不是ARTS打卡的目的,以现在的理解通过ARTS打卡其实主要是两个目的:
1. 坚持学习。做算法题也好,阅读英文技术文章也好,其实就是培养一个坚持学习的习惯
2. 坚持输出。非常惭愧,要输出内容这个其实是我2019年的计划,然后也就被推迟到了2020年的现在。总的来说是一个开始,希望自己能坚持下去。
2020 年 05 月 30 日 00:23
回复
没有更多了
ARTS-week-1