20180902_ARTS_week10

第十周,算法题 Container With Most Water,看了一篇介绍 VS Code 插件和技巧的文章,介绍一个做圆形轨迹拖动时用向量来计算顺时针逆的方法,继续分享了阅读《暗时间》时关于逆人性的一些感想。

Algorithm

/**
 * 
 * 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)。

Review

Pro tips for Visual Studio Code to be productive in 2018

https://medium.com/@i_AnkurBiswas/pro-tips-for-visual-studio-code-to-be-productive-in-2018-d5252e914561

文章中作者介绍了几个 VS Code 的插件和几个使用技巧,挑几个实用的说说。

  1. Gitlens。 这是一个插件,用来告诉你每一行代码是由何人何时提交的。
  2. Live Share。同样是个插件,据说可以实时共享 workspace,实时修改,小组 debug。特别适合远程讨论的场景。不过注意还是开发者预览版本。
  3. Json to Code。这个插件感觉会很有用,当你的 API 是 json 的时候,可以通过 json 数据直接生成对应的强类型的结构代码。支持生成 TypeScript,Python,Go,C#,Java,JavaScript 等等。
  4. 全局改名。这个小技巧就是当改变变量或者方法名时,通过 F2 可以改变调用的地方,如果只想改当前文件,可以用 Command + F2 或者 Ctrl + F2
  5. 同时修改多行。这个技巧用过 sublime text 的应该很熟悉,就是多点几个光标出来,然后同时操作。文章中说是 Option,我 Mac 是实测是 Command,可能跟我用的是 sublime 的键位有关系。
  6. 保存全部。这个功能的快捷键并没有默认提供,可以自己在 Keyboard Shortcuts 创建。

Tip

记录一下之前页面上要做一个效果,一个图片要能在页面上的一个固定的圆形路径上拖动。这里有个难点就是顺时针和逆时针的判断。

因为通过三角函数,我们算出来的角度是不会大于 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是顺时针的

这样就可以算出来拖动的时候是逆时针还是顺时针,之后就可以争对性的做处理了。

Share

继续分享看《暗时间》中的一些感想。

在『逃出你的肖申克』一节中讲到人的一些天性和习惯,比如我们天性是目光短浅,只看到眼前利益,也许这在物质匮乏有上顿没下顿的远古社会是再正常不过的了;比如我们总说『说起来容易,做起来难』,习惯的力量远远大于我们想象,听到一番很有道理的话后,看似有些领悟,可能过几天不注意又故态复萌了。

这是由于很多天性是在远古社会选择适应的,并不适应短短几百年我们才迈入的现代社会。

就像学习一样,是个逆人性的过程。坚持做事情同样也是如此。

这个也和《人类简史》一书中说的暗暗相通,人们对糖分的追求是刻在骨子里的,远古社会资源匮乏,而糖分是主要的热量来源,所以数万年来人类祖先都在渴求糖分,这也传承在我们的基因里。 到了现代社会,资源已经极大的丰富,理论上来说不需要吃大量的糖分,但人们还是忍不住,因为这个不是由我们身体决定的,而是我们的天性,所以减肥很痛苦,也是一个逆人性的过程。

有时候从天性,从传承的角度来看我们自己的种种行为,会觉得特别有意思。


碎碎念

记录一些所思所想,写写科技与人文,写写生活状态,写写读书心得,主要是扯淡和感悟。 欢迎关注,交流。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 20180701_ARTS_week01

    Two Sum Given an array of integers, return indices of the two numbers such that ...

    Bob.Chen
  • 2018-0701_ARTS_week01

    Bob.Chen
  • Canvas基础-粒子动画Part1

    网页上各种酷炫的粒子动画看的人眼花缭乱,实际上原理却非常简单。 获取像素信息 首先我们需要画张图到Canvas上,这里因为我懒的扣图(实际上是不会),就找...

    Bob.Chen
  • Python 实现简单的导弹自动追踪

    自动追踪算法,在我们设计2D射击类游戏时经常会用到,这个听起来很高大上的东西,其实也并不是军事学的专利,在数学上解决的话需要去解微分方程,

    IT派
  • 多图详解 DeepMind 的超人类水准星际争霸 AI 「AlphaStar」

    参加直播的 DeepMind 研究人员是 DeepMind 团队联合研发负责人 Oriol Vinyals 和 David Silver,后者也是 AlphaG...

    AI科技评论
  • MySQL从删库到跑路(三)——SQL语言

    SQL是结构化查询语言(Structured Query Language),是用于访问和处理数据库的标准的计算机语言。 SQL语言的功能如下: A、SQL面向...

    良月柒
  • SQL注入攻击导致BIGINT溢出错误

    首先, 溢出,通俗的讲就是意外数据的重新写入,就像装满了水的水桶,继续装水就会溢出,而溢出攻击就是,攻击者可以控制溢出的代码,如果程序的对象是内核级别的,如d...

    随心助手
  • SQL | 数据分析面试必备SQL语句+语法

    前些天在网上冲浪的时候看到一个案例咨询,问说世界500强的数据分析要不要去,评论区一片爆炸:“楼主能分享一下文科生怎么转行做数据分析吗??”、“SQL、pyth...

    咸鱼学Python
  • div定位在浏览器底部(CSS解决)

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.o...

    用户1730674
  • Cypress系列(22)- 可操作类型的命令 之 select()

    https://www.cnblogs.com/poloyy/category/1768839.html

    小菠萝测试笔记

扫码关注云+社区

领取腾讯云代金券