zoukankan      html  css  js  c++  java
  • 【ARTS】002-第二周(2020.06.01-2020.06.07)

    一、Algorithm

    1. 题目

      给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。

      示例:

     1 // 示例 1:
     2 输入: 123
     3 输出: 321
     4 
     5 // 示例 2:
     6 输入: -123
     7 输出: -321
     8 
     9 // 示例 3:
    10 输入: 120
    11 输出: 21

      注意:假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231,  231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。

    2. 题解

    整数反转的思路:

      通过对 10 取余,可以获取当前最后一位数字。将结果变量乘以 10,再加上新获取的最后一位数字,即实现了反转。可以理解成把原数字的每一位倒着挤出来,送入新的结果变量。

    INT_MAX & INT_MIN

      首先,C/C++ 在 limits.h 中定义了常量 INT_MAXINT_MIN,用于表示整型变量的最大值和最小值。

      因为 int 类型变量占 4 字节(32 位),所以 INT_MAX = 231-1,INT_MIN= -231。C/C++ 中,所有超过该限值的整型数,都会出现溢出,导致 warning,但是并不会出现 error。如果想表示的整数超过了该限值,可以使用长整型 long long(8 字节)。

      INT_MAX 和 INT_MIN 的运算如下:

      • INT_MAX + 1 = INT_MIN

      • INT_MIN - 1 = INT_MAX

      • abs(INT_MIN) = INT_MIN

      • INT_MAX + INT_MAX = -2

      • INT_MIN + INT_MIN = 0 。

      换个角度理解,前三条运算性质如下:

      • INT_MAX + 1 < INT_MAX

      • INT_MIN - 1 > INT_MIN

      • abs(INT_MIN) < 0
     1 int reverse(int x){
     2     
     3     int result = 0;
     4 
     5     while (x)
     6     {
     7         if (result > INT_MAX / 10 || result < INT_MIN / 10)
     8         {
     9             return 0;
    10         }
    11 
    12         result = result * 10 + x % 10;
    13 
    14         x /= 10;
    15     }
    16 
    17     return result;
    18 }

    二、Review

      本周阅读的文章为:《If You Want to Be a Senior Developer, Stop Focusing on Syntax》

      作者探讨了这样一个问题:初级开发者往往将注意力集中在学习、记忆某种编程语言和框架的语法细节。他们为此烦恼,甚至以开发过程中需要查阅文档为耻。

      但对于有使用多种语言开发经历的高级开发者而言,他们并不认为需要记忆这些语法细节。很多大牛坦承,自己编程时也经常谷歌。甚至于,连招聘者都不是很在意这些细节。因为这些语法细节完全可以使用 IDE 解决。

      对于高级开发者而言,即便是从未接触过的技术,也“不过是另一种工具”。他们并不需要先掌握这项新技术的全部细节再开始工作,而是用几个小时来阅读文档,建立基本的认识。此时开发工作就可以开始了,在开发过程中遇到问题,随用随学即可。

      当下,技术的快速迭代使得我们有学不完的新知识——新的语言、新的框架,亦或原有语言或框架的大量更新。你几乎不可能掌握所有的细节,而且这样做的性价比太低了。

      牛叉的工程师,应该更注重这两项能力:

    • 对于新知识,如何在短时间内建立基本认知,快速上手。
    • 在开发过程中遇到问题,如何善用搜索引擎,快速找到解决问题的方法。

      在学习过程中也是如此,你不可能等到万事具备才启程。先掌握目前需要的知识,然后继续前行。遇到下一个问题时,再停下来寻求解决之道。这就好比开车出行,如果你想等到一路都是绿灯才动身,那你永远无法抵达。正确的方法是,先把眼前的绿灯开过去,遇到红灯就停下来,变成绿灯后再继续前行。

    单词/词组

      grocery                            n. 杂货店

      beat yourself up              自责

           intentionally                     adv. 有意地

      sufficient                         adj. 充足的

    三、Tips

      https://www.cnblogs.com/murongmochen/p/12964618.html

    四、Share

      《别让自己“墙”了自己》

    • 要融入一流的舞台和团队。视野、环境和舞台,对一个人的限制非常大。

    • 做有价值的事。不要把自己的时间浪费在“写玩具代码”、“搬砖”、“用蛮力加班”的境地。所谓有价值,就是别人愿为此付高价的、高技术门槛的、有创造力的、颠覆性的。

    • 不要封闭自己的技术栈,对于好的程序员来说,完全可以同时掌握几门语言和技术。偏见和不开放,对一个人的限制是真正有毁灭性的。主动让自己成为一个瞎子和聋子,主动把自己的能力阉割掉,这是一件令人痛心的事。谭嗣同说“把卷撑开海眼银”,要广泛地吸收新知识,而非将自己封闭起来。

    • 要穷举各种方法来解决问题,而非寻找借口。要努力改变自己的问题和缺陷,而非放任自流。我们可能会受到各种外在因素的限制,譬如“我家在河北,所以不能去上海、深圳(好在还有个北京可选)”。譬如“我是学测控技术与仪器的,所以无法与计算机专业的同学竞争,不能做软件开发”。这些问题虽然客观存在,但并非无法可解。关键在于,我们发现问题后,是想方设法去解决它,还是以此为借口,封闭这个方向的所有可能。

    • 要以开放的态度来拥抱新技能和新思维。英语对能否融入世界起到决定性的作用,不过关,就去练习。写代码的习惯不好,就去改变。你的视野决定了你是否知道要去哪,你的开放程度决定了你是否愿意为之改变。

    • 要精于计算得失,学会取舍,抓主要矛盾。一般人算计短期内能得到什么,而优秀的人则是舍在今天,得在未来。整日纠结于低维度的问题(薪水不多、工作地点、是否能稳定到退休),会让人沦于平庸。要习惯从更高的维度来思考问题(譬如是否开阔了眼界、是否提升了竞争力、能否解决更难问题,创造更大价值)。

    • 要勇于跳出传统的束缚。敢想敢拼的人,最差不过是没有成功,回到起点。连想都不敢想的人,只能缩在起点,做一只鹌鹑。

      最后,以文中引用庄子的论述来作为结尾,并自我鞭策吧:

      井蛙不可以语于海者,拘于虚也。(此为受到空间局限)

      夏虫不可以语于冰者,笃于时也。(此为受到时间局限)

      曲士不可以语于道者,束于教也。(此为受到认知局限)

  • 相关阅读:
    NVIDIA GTC照片
    渲染农场云云
    Visual Studio 2008 SP1键盘F10单步调试超慢解决方法
    跨DLL操作fopen的返回值导致出错
    OSL LLVM 3.3 Related Changes
    Windows上编译OpenShadingLanguage
    Windows上编译OpenImageIO
    Windows上编译LLVM 3.2
    Windows上编译OpenEXR
    Windows上编译libtiff
  • 原文地址:https://www.cnblogs.com/murongmochen/p/13022511.html
Copyright © 2011-2022 走看看