从一段代码想到的

今天看到一篇微信推送,说下面这段代码有可能引起死循环:

1
2
3
4
5
6
7
8
9
int main() 
{
int a[10], i;
for (i = 1; i <= 10; i++)
{
a[i] = 0;
}
return 0
}

再看看文章下面的评论,基本上都是认为对于a[10]的引用实际上是变量i的地址,然而即使是我这个半吊子水平也知道这显然是错误的解释。但是实际实验了一下之后发现我的第一印象也是有点想当然了。

应该如何学编程?

掐指算来我开始学习编程也差不多快要五年了,在此道上我应该算是略显愚笨之人,看到大神的光鲜履历实在难以望其项背。直到现在我也常常问我自己:我应该如何学习编程?五年了,虽然我觉得我还只是管中窥豹,但是我也不是初出茅庐的小菜鸟了,昨天看到了王垠的博文:如何掌握所有的程序语言 ,想说说我自己的想法。当然即使王垠在微软不得志,我跟他的水平也有着数量级的差距,就当是一些瞎BB吧。

我没接触过函数式编程,所以这一块就……

有的东西写错了也没办法……反正也不会有人看。全文约3400字。

大梅沙半日游

上星期也不知道我脑子里面的哪根筋搭错了想要跑去深圳的海边玩玩,说走就走啊,Google一搜,去大小梅沙吧。

离线手动配置VIM

实习公司的后台开发都在一台内网的开发机上,登录还要通过跳板机,并且禁止SCP、FTP等协议,开发只能使用VIM等命令行编辑器,使用sz/rz来临时上传下载文件。开发机上的vim没有任何插件,撑死了使用vimrc来打开行号、代码高亮等基础功能,自动补全只能用Ctrl-N这种原始的单词匹配来勉强使用。由于开发机不能连接外网,所以废掉了几乎所有一件配置脚本,Vundle什么的也是基本无解,只能进行手动配置了。本文记录一下我的折腾过程。

// 还有一个月就走了费什么劲呢

// 生命在于折腾

近况

从上个月中旬开始,我就到国内的某互联网大厂实习了。其实本来在Google东京的实习面试中也过了面试进入了Team match的阶段,但是由于时间不够了只能忍痛放弃。现在具体在哪家就不说了。这几个星期也没有什么时间来刷LeetCode了,估计被落下了一大截。上一篇Node.js的博文也只能先停下来了。

实习的感受就是国内的加班真的很严重,而且很多员工似乎是并没有认为有什么不妥,八九点钟下班是常态。我的职位是后台开发,说实话,在大厂干这种工作是挺无聊的,就是不停的调接口调接口(大概是因为我所在的组所负责的业务已经非常成熟了)总之并没有什么有趣的地方,在这里一干好多年应该不是我想要的生活。

下周就会收到I-20,已经预约了月底的面签,终于到了最后一道坎了,祝我九月北美找工顺利吧~

LeetCode 567. Permutation in String

题目描述:

Given two strings s1 and s2, write a function to return true if s2 contains the permutation of s1. In other words, one of the first string’s permutations is the substring of the second string.

Example 1:

1
2
3
Input:s1 = "ab" s2 = "eidbaooo"
Output:True
Explanation: s2 contains one permutation of s1 ("ba").

Example 2:

1
2
Input:s1= "ab" s2 = "eidboaoo"
Output: False

Note:

  1. The input strings only contain lower case letters.
  2. The length of both given strings is in range [1, 10,000].

双指针,在s2中寻找一个连续子串,其中包含所有的s1中的字符并且没有其他字符。用一个哈希表记录s1中每个字符的出现次数,然后右指针前进,直到左右指针之间的子串不满足条件(也就是有字符的出现次数多于其在s1中的出现次数),再向前移动左指针直到满足条件,当子串长度等于s1的长度时返回true,如果没有这样的子串返回false。

LeetCode 566. Reshape the Matrix

题目描述:

In MATLAB, there is a very useful function called ‘reshape’, which can reshape a matrix into a new one with different size but keep its original data.

You’re given a matrix represented by a two-dimensional array, and two positive integers r and c representing the row number and column number of the wanted reshaped matrix, respectively.

The reshaped matrix need to be filled with all the elements of the original matrix in the same row-traversing order as they were.

If the ‘reshape’ operation with given parameters is possible and legal, output the new reshaped matrix; Otherwise, output the original matrix.

Example 1:

1
2
3
4
5
6
7
8
9
Input: 
nums =
[[1,2],
[3,4]]
r = 1, c = 4
Output:
[[1,2,3,4]]
Explanation:
The row-traversing of nums is [1,2,3,4]. The new reshaped matrix is a 1 * 4 matrix, fill it row by row by using the previous list.

Example 2:

1
2
3
4
5
6
7
8
9
10
Input: 
nums =
[[1,2],
[3,4]]
r = 2, c = 4
Output:
[[1,2],
[3,4]]
Explanation:
There is no way to reshape a 2 * 2 matrix to a 2 * 4 matrix. So output the original matrix.

Note:

  1. The height and width of the given matrix is in range [1, 100].
  2. The given r and c are all positive.

没什么好说的,就按照顺序遍历矩阵把元素放进新矩阵就可以了。

[边做边学]用Node.js+React+Express来写个聊天室(1)

前言

Node.js现在实在是火的不行,搞得我也想来学一学。以我的经验,上手的最快办法就是直接开始做这篇文章就是我边做边学的记录吧。但是以我几年前学的三脚猫js水平,想要直接开始做真的是有点困难。所以先找几篇文章来补补基础知识。

我也是只个纯新手,难免有错漏之处,欢迎指出。

LeetCode 563. Binary Tree Tilt

题目描述:

Given a binary tree, return the tilt of the whole tree.

The tilt of a tree node is defined as the absolute difference between the sum of all left subtree node values and the sum of all right subtree node values. Null node has tilt 0.

The tilt of the whole tree is defined as the sum of all nodes’ tilt.

Example:

1
2
3
4
5
6
7
8
9
10
Input: 
1
/ \
2 3
Output: 1
Explanation:
Tilt of node 2 : 0
Tilt of node 3 : 0
Tilt of node 1 : |2-3| = 1
Tilt of binary tree : 0 + 0 + 1 = 1

Note:

  1. The sum of node values in any subtree won’t exceed the range of 32-bit integer.
  2. All the tilt values won’t exceed the range of 32-bit integer.

使用递归来分别计算左右子树。