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 ...
随机推荐
- caffe实战笔记
Caffe简要介绍: Caffe还没有windows版本,所以我需要远程登录linux服务器 Caffe主要处理图片/图片序列 Caffe读取的数据格式 从专用的数据库中读取(lmdb.leveldb ...
- Netty快速入门(01)Linux I/O模型介绍
Netty简述 Netty是一个高性能的网络编程框架. 上面提到了几个关键的字眼,高性能,网络编程,框架.这些概括Netty的本质. Netty是一个NIO客户端服务器框架,可以快速轻松地开发协议服务 ...
- 更好用的 Python 任务自动化工具:nox 官方教程
英文| nox tutorial 出处| nox 官方文档 译者| 豌豆花下猫@Python猫 Github地址:https://github.com/chinesehuazhou/nox_doc_c ...
- postman传递当前时间戳
有时我们在请求接口时,需要带上当前时间戳这种动态参数,那么postman能不能自动的填充上呢. 1请求动态参数(例如时间戳) 直接在参数值写 {{$timestamp}} 如下: 我们也可以使用pos ...
- 【UEFI】---基于UEFI编程的基本思路
最近基于UEF在写代码的时候,发现由于粗心总是出现很多问题,而且都是一些小问题.虽然UEFI玩了挺久,但是也没梳理一下思路.借此机会整理一下: UEFI对复杂的BIOS代码做了很好的封装和模块化. ...
- 对网站和项目使用IIS Express的64位版
- 如何优雅的用策略模式,取代臃肿的 if-else 嵌套,看这篇就够了
经常听同事抱怨,订单来源又加了一种,代码又要加一层if-else判断,光判断订单来源的if-else就好几百行代码,代码我都不想看了,相信很多同行都有过这样的感受! Java的二十几种设计模式背的滚瓜 ...
- UAF——use after free
本文系pwn2web原创,转载请说明出处 UAF 漏洞,英文原名use after free,该漏洞简洁的可以概括为 分配一块内存 free该内存但不回收,构成悬垂指针 再次构造分配同样大小的内存,按 ...
- pymysql总结
一.创建数据库 import pymysql conn = pymysql.connect(host='ip', user='root', password='密码') # 以字典的形式返回操作结果 ...
- JSON解析值富文本
解析前端传递的JSON数据中可能如下 { "result": "<input value="Test" type="button&qu ...