ARTS Week 15
Feb 3, 2020 ~ Feb 9, 2020
Algorithm
Problem 172.Factorial Trailing Zeroes(阶乘末尾的0) 题目链接
题目描述:给定一个整数n,求 n! 的末尾0的个数
思路为:因为 2 × 5 = 10,因此只要求得 n! 中因数 2 和 5 个数中的较小值,显然,因数为 5 的个数比因数为 2 的个数少。因为$ n! = 12...(n-1)n $,那么也就是求 1,2,...,n-1,n 这一列数中因数5的个数。我们发现只有 5, 10, 15, ... 的因数中才含有 5。因此我们容易想到通过计算 n//5 来求得因数等于5的个数,但这并没有全部算进去,因为像 25,50,125,625 这些数字不只含有一个因数5。因此,正确的求解公式如下:
\]
通过的代码如下:
class Solution:
def trailingZeroes(self, n: int) -> int:
res = 0
tmp = 5
while n >= tmp:
res += (n // tmp)
tmp *= 5
return res
Review
本周继续 Review 每个程序员需要知道的97件事(英文名:97 Things Every Programmer Should Know)。原文链接。下面是本周的5个小内容:
- 进程间通信影响应用程序响应时间(Inter-Process Communication Affects Application Response Time) 原文链接
响应时间是一个软件可用性的重要衡量标准,响应时间太久很容易带来用户的反感。而占据响应时间最多的便是进程间通信(IPC),IPC太慢或者IPC个数太多都会影响响应时间。优化方法有如下三种:1)优化进程间通信的速度,2)减少不必要进程间通信个数,3)缓存以前的进程间通信结果 - 保持构建清洁(Keep the Build Clean) 原文链接
随着项目的增长,警告会越来越多,它们之间的关系也越来越复杂,想找到自己的所需要的警告也很难。因此在出现警告后应该尽快处理警告,避免警告越积累越多,警告也是代码卫生的重要的组成部分。 - 知道如何使用命令行工具(Know How to Use Command-line Tools) 原文链接
现如今,有许多集成开发环境(IDE)可供使用,IDE有许多优点,但同样也有缺点,其屏蔽了底层细节导致你无法准确知道发生了什么。而使用命令行构建工具,你可以知道构建可执行文件的所有步骤(编译,链接)。此外,命令行工具中有些一个图形化界面更加强大,比如 grep 和 sed。当然,这并不是建议你放弃 IDE 而完全去使用命令行。 - 学会至少两种编程语言(Know Well More than Two Programming Languages) 原文链接
虽然现在有些语言相当流行,比如 Java,C/C++,Python。但是仅仅学习其中一种是远远不够的,你应该多学习一种语言,不同语言有着不同的差异,学习新的语言并明白它与已经学会的语言之间的区别,在对比二者的同时,互相取长补短,能获得更深刻的理解。 - 了解你的IDE(Know Your IDE) 原文链接
现代IDE使用起来十分方便,但是如果你并不熟练它,使用它的效率并不高。学习 IDE 的第一步便是了解其键盘快捷键。但是某些 IDE 寿命并不长,他们使用的快捷键也可能在将来无法使用,因此去学习那些命令行工具吧,比如 grep(1974年出现) sed(1974年出现) awk(1977年出现) 等。它们存在了几十年,并仍将存在。
Tips
在 Python2 中,检查一个值是否为一个字典中的键中可以使用dict.has_key() 方法,而在 Python3 中,字典中没有该方法。无论 Python2 还是 Python3 都可以使用 in 关键字来进行检查某个键值是否存在。示例代码如下:
Python 2.7.14 (default, Oct 12 2017, 15:50:02) [GCC] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> a = {1:'a', 2:'b'}
>>> a
{1: 'a', 2: 'b'}
>>> a.has_key(1)
True
>>> 1 in a
True
Python 3.6.10 (default, Jan 16 2020, 09:12:04) [GCC] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> a = {1:'a', 2:'b'}
>>> a
{1: 'a', 2: 'b'}
>>> a.has_key(1)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'dict' object has no attribute 'has_key'
>>> 1 in a
True
Sharing
命令行工具是非常有用且强大的,它们通过提供许多的选项来使其具有强大的功能,有兴趣可以去看看 grep apt rpm 等命令的手册,它们都具有很多的选项。不过,正是由于其选项复杂,当不熟悉时,命令行使用起来没有 GUI 工具方便。GUI 工具也可以实现复杂的功能,但是很多使用 GUI 工具的人对其复杂的功能并不熟悉,就拿我个人而言,虽然在使用 IDEA,Visual Studio。但是,自己对这些工具并不熟悉,有一些功能总是在上网查询后才知道如何使用,并且一段时间不使用的话就很容易忘记了。
ARTS Week 15的更多相关文章
- 【ARTS】01_18_左耳听风-20190311~20190317
ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...
- 一切从这里起始(左耳听风 ARTS 6号小组 week 1)
ARTS 具体要求: 1.每周至少做一个 leetcode 的算法题2.阅读并点评至少一篇英文技术文章3.学习至少一个技术技巧4.分享一篇有观点和思考的技术文章 1.Algorithm Two Sum ...
- 【ARTS】01_42_左耳听风-201900826~201900901
ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...
- 【ARTS】01_43_左耳听风-201900902~201900908
ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...
- 【ARTS】01_41_左耳听风-201900819~201900825
ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...
- 【ARTS】01_40_左耳听风-201900812~201900818
ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...
- .NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验
不知不觉,“.NET平台开源项目速览“系列文章已经15篇了,每一篇都非常受欢迎,可能技术水平不高,但足够入门了.虽然工作很忙,但还是会抽空把自己知道的,已经平时遇到的好的开源项目分享出来.今天就给大家 ...
- 15个关于Chrome的开发必备小技巧[译]
谷歌Chrome,是当前最流行且被众多web开发人员使用的浏览器.最快六周就更新发布一次以及伴随着它不断强大的开发组件,使得Chrome成为你必备的开发工具.例如,在线编辑CSS,console以及d ...
- 15个C++项目列表
实验楼上有很多C++的实战项目,从简单到进阶,学习每个项目都可以掌握相应的知识点. 如果你还是C++新手的话,那么这个C++的项目列表你可以拿去练手实战开发,毕竟学编程动手实践是少不了的! 如果你不知 ...
随机推荐
- Angular Schematics 三部曲之 Add
前言 因工作繁忙,差不多有三个月没有写过技术文章了,自八月份第一次编写 schematics 以来,我一直打算分享关于 schematics 的编写技巧,无奈还是拖到了年底. Angular Sche ...
- netcore 自动生成Dockerfile的坑
简介 之前采用shell脚本+dockerfile的方式构建项目,后来发现有Docker在17.05版本之后有多阶段构建方式,该文主要记录了netcore采用dockerfile构建遇到的坑. 原 ...
- 探究Dubbo的拓展机制: 上
这篇博文是我决心深度学习Dubbo框架时记录的笔记, 主题是Dubbo的拓展点, 下面的几个部分相对来说比较零散, 貌似是不和主题挂钩的 , 并且是一些很冷门的知识点 , 但是它们确实是深入学习Dub ...
- CF749D Leaving Auction set排序查找
CodeForces 749D. Leaving Auction 传送门 There are n people taking part in auction today. The rules of a ...
- C# Datatable 添加列
DataTable dt = new DataTable("Datas"); DataColumn dc = null; //dt新增列 dc=dt.Columns.Add(&qu ...
- 【原创】快速失败机制&失败安全机制
这是why技术的第29篇原创文章 之前在写<这道Java基础题真的有坑!我求求你,认真思考后再回答.>这篇文章时,我在8.1小节提到了快速失败和失败安全机制. 但是我发现当我搜索" ...
- “云”端的语雀:用 JavaScript 全栈打造商业级应用
作者| 不四(死马)蚂蚁金服 语雀产品技术负责人 语雀是什么? 语雀是一个专业的云端知识库,面向个人和团队,提供与众不同的知识管理,打造轻松流畅的工作协同,它提供各种格式的在线文档(富文本.表格.设 ...
- TensorFlow——LinearRegression简单模型代码
代码函数详解 tf.random.truncated_normal()函数 tf.truncated_normal函数随机生成正态分布的数据,生成的数据是截断的正态分布,截断的标准是2倍的stddev ...
- arthas 使用指导
arthas 阿尔萨斯 这种命令行的东西首先得知道 如何使用帮助,帮助文档最先开始用的,应该是可以在网上找到的官方文档 文档一:https://alibaba.github.io/arthas/ind ...
- Spring 框架学习(1)--Spring、Spring MVC扫盲
纸上得来终觉浅,绝知此事要躬行 文章大纲 什么是spring 传统Java web应用架构 更强的Java Web应用架构--MVC框架 Spring--粘合式框架 spring的内涵 spring核 ...