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 ...
随机推荐
- 力扣208——实现 Trie (前缀树)
这道题主要是构造前缀树节点的数据结构,帮助解答问题. 原题 实现一个 Trie (前缀树),包含 insert, search, 和 startsWith 这三个操作. 示例: Trie trie = ...
- web三要素
1.带动web的三驾马车 html5,css,javascript(js)就是带动web的三架马车,html是web的结构,css是web的样式,而js则是web的行为(即与用户的交互) 如果把htm ...
- 【记】本地远程连接VM VirtualBox中虚拟机Centos6的数据库MySQL
目标:远程连接虚拟机中的MySQL 效果图如下 1. VBox设置好端口转发 具体步骤请看 VM VirtualBox 网络地址转换(NAT)使用详解 2. MySQL授权 如果这时我们就去远程连接M ...
- 梳理js数组去重中代码比较简洁的方案
一.es6 Set去重 function removal(arr) { return Array.from(new Set(arr)) } let arr=[1,2,1,3,4,5,5] remova ...
- NOIP提高组2018试题解析 目录
重磅来袭! 本蒟蒻准备挑战一下NOIP2018提高组的试题啦(怎么办 我猜我连10分都拿不了) 目录: Day1 1.铺设道路 讲解 得分:100 2.货币系统 讲解 3.赛道修建 讲解 ...
- 【聚类评价】Calinski-Harabaz(CH)
Calinski-Harabaz(CH) CH指标通过计算类中各点与类中心的距离平方和来度量类内的紧密度,通过计算各类中心点与数据集中心点距离平方和来度量数据集的分离度,CH指标由分离度与紧密度的比值 ...
- Djaingo 随机生成验证码(PIL)
基础: https://www.cnblogs.com/wupeiqi/articles/5812291.html 实例: https://www.cnblogs.com/6324TV/p/88112 ...
- 高通量计算框架HTCondor(二)——环境配置
目录 1. 概述 2. 安装 3. 结果 4. 相关 1. 概述 HTCondor是开源跨平台的分布式计算框架,在其官网上直接提供了源代码和Windows.Linux以及MacOS的安装包.因为平台限 ...
- NOI2019 酱油记
今天是 \(7.18\) ,考完二试炸的很惨-于是我就来写游记了. DAY 0 签到日(7.14) 还没起床,原先定的飞机就被取消了,只好改签. 然而还是很早到的机场,等了好久好久. 到广州咯~下大雨 ...
- [bzoj4823][洛谷P3756][Cqoi2017]老C的方块
Description 老 C 是个程序员. 作为一个懒惰的程序员,老 C 经常在电脑上玩方块游戏消磨时间.游戏被限定在一个由小方格排成的R行C列网格上 ,如果两个小方格有公共的边,就称它们是相邻的, ...