ARTS Week 9
Dec 23, 2019 ~ Dec 29, 2019
Algorithm
Problem 69 Sqrt(x) 实现求解平方根函数Sqrt(x) 题目链接
题目描述:给定一个非负数x,求解该数字的平方根,如果不是小数,则进行取整处理。例如:Sqrt(8) = 2
思路:当 x > 4 时,其平方根必然小于小于其 x/2,因此可以用二分法来确定,判断 mid-1 和 mid+1是因为结果要进行取整,那么要满足如下等式: $ res^2 \leq x \leq (res+1)^2 $。至于 x <= 4 的情况,可以单独判断列出。
通过的代码如下
class Solution:
def mySqrt(self, x: int) -> int:
if x == 0:
return 0
elif x == 1 or x == 2 or x == 3:
return 1
else:
res = 0
left = 0
right = x
mid = (left + right) // 2
while (1):
if mid * mid == x:
res = mid
break
elif mid * mid > x:
if (mid-1) * (mid-1) <= x:
res = mid - 1
break
else:
right = mid - 1
mid = (left + right) // 2
else:
if (mid+1) * (mid+1) > x:
res = mid
break
elif (mid+1) * (mid+1) == x:
res = mid + 1
break
else:
left = mid + 1
mid = (left + right) // 2
return res
Review
本周继续 Review 每个程序员需要知道的97件事(英文名:97 Things Every Programmer Should Know)。原文链接。下面是本周的5个小内容:
- 按照领域的语言编写代码(Code in the Language of the Domain) 原文链接
每一个领域都有其独特的结构,我们应该按照领域来编写代码。也就是说,设计数据结构时要尽可能的多考虑下相应领域。 - 代码便是设计(Code is Design) 原文链接
写代码是一个创造性的过程,而不是一个机械的过程。就好比盖楼房一样,今天盖楼房的速度远远超过过去,而更多的时间花在了设计建筑上。同样的,今天各种自动化,测试工具使得我们的软件设计可靠性大幅度得到了提升,但是设计不好的代码,想要通过测试工具的测试就不大容易,需要花费更多的时间在改进代码上。 - 代码布局事项(Code Layout Matters) 原文链接
代码布局事项在概念上和代码风格比较类似。代码布局更加强调的是可阅读性,比如合适的缩进,IDE/编辑器中代码的字体、大小、间距以及配色,风格等等。虽然这些项目无关,也没有具体统一的标准,但是它们对一个人来说还是相当重要的,当你使用你所喜欢的布局会在一定程度上提高效率。 - 代码审查(Code Reviews) 原文链接
代码审查是必须的,因为它能提高代码质量同时减少bug。不过,不少人不喜欢代码审查,一个重要的原因便是人们怕受到惩罚。因此不应该对在代码审查发现的问题进行过分的惩罚。代码审查不仅仅是简单地发现、纠正代码中的错误,另一个目的便是建立通用的编码准则。在审查他人代码时要保持谦虚,确保评论有建设性,避开刻薄、直接批评等。 - 用理性写代码(Coding with Reason) 原文链接
前人已经总结了许多好的编码实践,在编写代码应该保持清醒,避免自己出现不符合要求的。具体的一些编码实践如下:避免使用goto语句;避免使用可变的全局变量;每个变量的应具有尽可能小的作用范围;对象默认不可变,而不是可变;变量名、函数名使用简单清晰的命名;函数的功能要尽可能简单,参数要尽可能的少;某一对象提供的对外接口要可能简单,少。
Tips
Python中字符串方法str.isdecimal()、str.isdigit()、str.isnumeric() 初看很类似,但具体而言还是有一定区别的,具体区别如下:
str.isdecimal():是否仅为十进制数
str.isdigit(): 是否为小数,上标,下标
str.isnumeric():是否为小数,下标,上标,普通分数,罗马数字,货币数字
下面是示例代码:
print("'34'.isdecimal() is " + str('34'.isdecimal())) # True
print("'\u00B2'.isdecimal() is " + str('\u00B2'.isdecimal())) # False
print("'\u00BC'.isdecimal() is " + str('\u00BC'.isdecimal())) # False
print("'34'.isdigit() is " + str('34'.isdigit())) # True
print("'\u00B2'.isdigit() is " + str('\u00B2'.isdigit())) # True
print("'\u00BC'.isdigit() is " + str('\u00BC'.isdigit())) # False
print("'34'.isnumeric() is " + str('34'.isnumeric())) # True
print("'\u00B2'.isnumeric() is " + str('\u00B2'.isnumeric())) # True
print("'\u00BC'.isnumeric() is " + str('\u00BC'.isnumeric())) # True
Sharing
Code Review 是很重要的,但是很多时候做的并不好,甚至有些地方干脆没有。我认为 Code Review 就好比学生时代互相检查作业一样,但是由于种种原因,code review很难做好,同时,code review也需要一定水平或水平相似的人来做,试想一个水平较低的人去 Review 水平较高的人的代码,发现其代码中潜在问题的可能性较低。
在 Tips 中,str.isdigit()、str.isnumeric()中的上下标、普通分数,罗马数字,货币数字主要指的是 Unicode 编码,而不是 ASCII 码。
ARTS Week 9的更多相关文章
- KDE声音服务器 arts
KDE声音服务器 arts arts介绍arts是KDE的核心声音系统,支持多音频流.全双工.网络声音请求.ALSA与OSS驱动后端.JACK声音服务器后端等扩展,它既是声音服务器,也 提供一套音频软 ...
- 【ARTS】01_21_左耳听风-201900401~201900407
ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...
- 【ARTS】01_20_左耳听风-20190325~20190331
zz## ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 ...
- 【ARTS】01_19_左耳听风-20190318~20190324
ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...
- 【ARTS】01_18_左耳听风-20190311~20190317
ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...
- 【ARTS】01_17_左耳听风-20190304~20190310
ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...
- 【ARTS】01_16_左耳听风-20190225~20190303
ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...
- 【ARTS】01_15_左耳听风-20190218~20190224
ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...
- 【ARTS】01_14_左耳听风-20190211~20190217
ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...
- 【ARTS】01_13_左耳听风-20190204~20190210
ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...
随机推荐
- day4(dict和set)
dict 内置字典,使用key-value存储,具有极快的查找速度. >>>d = {'michael': 95, 'bob': 75, 'tracy': 85} >>& ...
- (一)Django项目架构介绍
项目的架构为: 1.虚拟环境virtualenv 安装Django==2.1.3 安装pymysql 安装mysqlclient 安装其他等 2.项目结构为: 应用APP: blog -- 管理博客 ...
- 端口扫描器--利用python的nmap模块
安装nmap模块挺麻烦的,搞了半天 不仅要安装pip install nmap 还要sudo apt install nmap 给出代码,没有设多线程,有点慢,注意端口的类型转换,搞了很久 #!/us ...
- 讲真,这两个IDE插件,可以让你写出质量杠杠的代码
昨晚躺在床上看<拯救大兵瑞恩>的时候,不由得感叹道:"斯皮尔伯格的电影质量真高,片头真实地还原了二战的残酷性."看完后,我的精神异常的亢奋,就想写篇文章来帮助大家提高一 ...
- .Net Core - AgileHttp
2020年新年将至,先预祝.Net Core越来越好. 做了这么多年一线开发,经常跟Http打交道.比如调用三方的Webservice,比如集成微信支付的时候服务端发起Prepay支付.特别是现在分布 ...
- cogs 1583. [POJ 3237] 树的维护 树链剖分套线段树
1583. [POJ 3237] 树的维护 ★★★★ 输入文件:maintaintree.in 输出文件:maintaintree.out 简单对比时间限制:5 s 内存限制:128 ...
- JS ES6补充
补充点:1.let const 2.字符串模板 3.箭头函数 4.对象的单体模式 5.面向对象 一.定义变量 A.var 特点: 1.定义全局变量 2.可以重复定义 3.变量名提升 <!DOC ...
- C++ vector对象是如何增长的
为了支持快速随机访问,vector将元素连续存储---每个元素紧挨着前一个元素存储. 如果没有空间容纳新元素: 容器必须分配新的内存空间来保存已有元素和新元素,将已有元素从旧位置移动到新空间中,然后添 ...
- jenkins集成jmeter-进阶篇
1.gitlab自动触发jenkins构建 1⃣️安装插件: 2⃣️新建工程,设置git url,build when a change is pushed auto.sh /bin/sh echo ...
- Spring Cloud Alibaba 之 Sentinel 限流规则和控制台实例
这一节我们通过一个简单的实例,学习Sentinel的基本应用. 一.Sentinel 限流核心概念 在学习Sentinel的具体应用之前,我们先来了解一下Sentinel中两个核心的概念,资源和规则. ...