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。因此,正确的求解公式如下:

\[n! = \left \lfloor \frac{n}{5} \right \rfloor + \left \lfloor \frac{n}{5*5} \right \rfloor + \cdots + \left \lfloor \frac{n}{5 ^ {n-1}} \right \rfloor + \left \lfloor \frac{n}{5^n} \right \rfloor + \cdots = \left \lfloor \frac{n}{5} \right \rfloor + \cdots + \left \lfloor \frac{n}{5^k} \right \rfloor , 5^k \leq n < 5^{k+1}
\]

通过的代码如下:

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的更多相关文章

  1. 【ARTS】01_18_左耳听风-20190311~20190317

    ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...

  2. 一切从这里起始(左耳听风 ARTS 6号小组 week 1)

    ARTS 具体要求: 1.每周至少做一个 leetcode 的算法题2.阅读并点评至少一篇英文技术文章3.学习至少一个技术技巧4.分享一篇有观点和思考的技术文章 1.Algorithm Two Sum ...

  3. 【ARTS】01_42_左耳听风-201900826~201900901

    ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...

  4. 【ARTS】01_43_左耳听风-201900902~201900908

    ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...

  5. 【ARTS】01_41_左耳听风-201900819~201900825

    ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...

  6. 【ARTS】01_40_左耳听风-201900812~201900818

    ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...

  7. .NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验

    不知不觉,“.NET平台开源项目速览“系列文章已经15篇了,每一篇都非常受欢迎,可能技术水平不高,但足够入门了.虽然工作很忙,但还是会抽空把自己知道的,已经平时遇到的好的开源项目分享出来.今天就给大家 ...

  8. 15个关于Chrome的开发必备小技巧[译]

    谷歌Chrome,是当前最流行且被众多web开发人员使用的浏览器.最快六周就更新发布一次以及伴随着它不断强大的开发组件,使得Chrome成为你必备的开发工具.例如,在线编辑CSS,console以及d ...

  9. 15个C++项目列表

    实验楼上有很多C++的实战项目,从简单到进阶,学习每个项目都可以掌握相应的知识点. 如果你还是C++新手的话,那么这个C++的项目列表你可以拿去练手实战开发,毕竟学编程动手实践是少不了的! 如果你不知 ...

随机推荐

  1. 【python小随笔】将一个列表的值,分成10个一组,遍历的时候每10个遍历一次

    t = ['B071LF9R6G', 'B0714BP3H4', 'B0756FL8R7', 'B072HX95ZR', 'B07CX389LX', 'B07D9MZ7BD', 'B07D9L15L5 ...

  2. WPF 给Button按钮加小图标图片Image

    前言:当WPF项目后台完成到一定程度的时候,就可以对XAML前端进行美化啦,个人认为XAML前端还是挺有意思的. 下面举一个Button加过小图标后的例子: 是不是比生硬的文字看来更人性化了呢? 不多 ...

  3. echarts更改坐标轴文字颜色及大小

    xAxis: { data: anameArr, axisLabel: { show: true, textStyle: { color: '#c3dbff', //更改坐标轴文字颜色 fontSiz ...

  4. RedisCluster linux下批量删除 key

    Redis Cluster linux下批量删除键 说明 使用时不支持传入参数 , 如 redis_batch_del.sh , 因为在linux下 会自动将 * 解析为当前目录下所有文件名, 目前还 ...

  5. 如何使用poi在word表格中插入行的4种方法

    本文记录了,在word表格中插入新行的几种方法.直接上代码说明 table.addNewRowBetween 没实现,官网文档也说明,只有函数名,但没具体实现,但很多文章还介绍如何使用这个函数,真是害 ...

  6. Golang 正则匹配 -- regexp

    匹配特殊字符 //re :=regexp.MustCompile("[~!@#$%^&*(){}|<>\\\\/+\\-[]:\"?'::''"&qu ...

  7. c++ 快读快输模板

    快读 inline int read() { ; ; char ch=getchar(); ; ch=getchar();} )+(X<<)+ch-'; ch=getchar();} if ...

  8. 【C_Language】---常用C语言控制台函数总结(持续更新)

    写了这么久的C程序,每次看到输出的结果都是从上往下排列的黑白框,有没有感觉很无聊啊?今天再次总结一个常用的控制台函数,能够帮助你做好一个好看的界面. 1.设置光标位置代码如下: int main(vo ...

  9. head查询

    • must子句:文档必须匹配must查询条件:• should子句:文档应该匹配should子句查询的一个或多个:• must_not子句:文档不能匹配该查询条件:• filter子句:过滤器,文档 ...

  10. 并行网关 Parallel Gateway

    并行网关 Parallel Gateway 作者:Jesai 2018年3月25日 00:26:21 前言: 做工作流时间长后,慢慢的就会发现,很多客户会需要会签的功能,会签的情况也有很多种,实现的方 ...