第十周,算法题 Container With Most Water,看了一篇介绍 VS Code 插件和技巧的文章,介绍一个做圆形轨迹拖动时用向量来计算顺时针逆的方法,继续分享了阅读《暗时间》时关于逆人性的一些感想。
/**
*
* Container With Most Water
* https://leetcode.com/problems/container-with-most-water/description/
*
* @param {number[]} height
* @return {number}
*/
var maxArea = function (height) {
var area = 0,
left = 0,
right = height.length - 1;
while (left < right) {
var curLeftHeight = height[left];
var curRightHeight =height[right];
var curHeight = Math.min(curLeftHeight, curRightHeight);
var tmpArea = curHeight * (right - left)
if (tmpArea > area) {
area = tmpArea;
}
if (curLeftHeight < curRightHeight) {
left += 1;
} else {
right -= 1;
}
}
return area;
};
console.log(maxArea([1, 8, 6, 2, 5, 4, 8, 3, 7]) ) // 49
这周因为有些事情忙,挑了条 easy 难度的题。整个思路比较简单,算面积嘛,然后左右两边分别有两个游标,哪个低了哪个就往中间移动一格。复杂度 O(n)。
Pro tips for Visual Studio Code to be productive in 2018
文章中作者介绍了几个 VS Code 的插件和几个使用技巧,挑几个实用的说说。
F2
可以改变调用的地方,如果只想改当前文件,可以用 Command + F2
或者 Ctrl + F2
。Option
,我 Mac 是实测是 Command
,可能跟我用的是 sublime 的键位有关系。Keyboard Shortcuts
创建。记录一下之前页面上要做一个效果,一个图片要能在页面上的一个固定的圆形路径上拖动。这里有个难点就是顺时针和逆时针的判断。
因为通过三角函数,我们算出来的角度是不会大于 180 度的,假设用户从12 点方向开始拖动,到六点方向之后,继续拖,角度就变成 179 度了,如果不知道方向就没办法继续定位了。
这里可以用向量叉积的方法来判断顺时针还是逆时针。
设圆心,起始点,移动的点分别为 A(x1,y1),B(x2,y2),C(x3,y3),顺次连接 A,B,C 组成三角形,AB 边和 AC 边的的向量分别为:
AB=(x2-x1,y2-y1) AC=(x3-x1,y3-y1)
则 AB 和 AC 的叉积为
|x2-x1, y2-y1|
|x3-x1, y3-y1|
值为:(x2-x1)*(y3-y1) - (y2-y1)*(x3-x1)
如果 AB*AC>0,则三角形ABC是逆时针的 如果 AB*AC<0,则三角形ABC是顺时针的
这样就可以算出来拖动的时候是逆时针还是顺时针,之后就可以争对性的做处理了。
继续分享看《暗时间》中的一些感想。
在『逃出你的肖申克』一节中讲到人的一些天性和习惯,比如我们天性是目光短浅,只看到眼前利益,也许这在物质匮乏有上顿没下顿的远古社会是再正常不过的了;比如我们总说『说起来容易,做起来难』,习惯的力量远远大于我们想象,听到一番很有道理的话后,看似有些领悟,可能过几天不注意又故态复萌了。
这是由于很多天性是在远古社会选择适应的,并不适应短短几百年我们才迈入的现代社会。
就像学习一样,是个逆人性的过程。坚持做事情同样也是如此。
这个也和《人类简史》一书中说的暗暗相通,人们对糖分的追求是刻在骨子里的,远古社会资源匮乏,而糖分是主要的热量来源,所以数万年来人类祖先都在渴求糖分,这也传承在我们的基因里。 到了现代社会,资源已经极大的丰富,理论上来说不需要吃大量的糖分,但人们还是忍不住,因为这个不是由我们身体决定的,而是我们的天性,所以减肥很痛苦,也是一个逆人性的过程。
有时候从天性,从传承的角度来看我们自己的种种行为,会觉得特别有意思。
记录一些所思所想,写写科技与人文,写写生活状态,写写读书心得,主要是扯淡和感悟。 欢迎关注,交流。