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

  1. KDE声音服务器 arts

    KDE声音服务器 arts arts介绍arts是KDE的核心声音系统,支持多音频流.全双工.网络声音请求.ALSA与OSS驱动后端.JACK声音服务器后端等扩展,它既是声音服务器,也 提供一套音频软 ...

  2. 【ARTS】01_21_左耳听风-201900401~201900407

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

  3. 【ARTS】01_20_左耳听风-20190325~20190331

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

  4. 【ARTS】01_19_左耳听风-20190318~20190324

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

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

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

  6. 【ARTS】01_17_左耳听风-20190304~20190310

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

  7. 【ARTS】01_16_左耳听风-20190225~20190303

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

  8. 【ARTS】01_15_左耳听风-20190218~20190224

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

  9. 【ARTS】01_14_左耳听风-20190211~20190217

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

  10. 【ARTS】01_13_左耳听风-20190204~20190210

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

随机推荐

  1. Date、Time类型拼接成字符串

    Date.Time类型拼接成字符串 语言用的是kotlin,和Java类似 var time = "" val sdf1 = SimpleDateFormat("yyyy ...

  2. 比特币学习笔记(二)---在windows下调试比特币源码

    根据我一贯的学习经验,学习开源代码的话,单单看是不够的,必须一边看一边调试才能尽快理解,所以我们要想法搭建windows下bitcoin源码的调试环境. 紧接着昨天的进度,想要调试linux下的比特币 ...

  3. ENS 域名注册表智能合约(ENSRegistry.sol)解析

    ENS 注册表合约是 ENS 系统中的核心合约,了解这个合约可以敲开我们理解 ENS 域名系统的大门. 打开下面的折叠区域可以查看用 Solidity 语言编写的详细代码.当前部署在以太坊中的 ENS ...

  4. three.js入门第一个案例

    准备工作 1.运用three.js进行3d开发,其实和页面编程一样,首先需要在html文件中引入three.js.Three.js使用面向对象的方式来构建程序,它包含3个基本对象: 场景(scene) ...

  5. Netty之缓冲区ByteBuf解读(一)

    Netty 在数据传输过程中,会使用缓冲区设计来提高传输效率.虽然,Java 在 NIO 编程中已提供 ByteBuffer 类进行使用,但是在使用过程中,其编码方式相对来说不太友好,也存在一定的不足 ...

  6. 第二篇:python中的字符串资源详述

    字符串资源使用方法详解 工具:Pycharm python环境:anaconda 接下来开始逐一解释: 如图: test后敲个点,就可以调用框框内的所有函数(功能),典型的面向对象思想. 上面只是简单 ...

  7. win10内存泄漏怎么办

    我的电脑莫名的内存占用越来越高,但是实际内存很低 查了很多资料 下边是我找到的最有效的方法: 原因:是系统自带的网络数据监控和和Killer网卡的监控程序冲突,导致 非页面缓存无法释放. 解决方法:解 ...

  8. .net core 2.2 中IHttpClientFactory的使用

    在.net core中使用HttpClient请求api,有很多资源的问题,比如使用using的时候,虽然可以释放资源,但是套接字(socket)也不会立即释放,所以.net core2.1中,新增了 ...

  9. 史上最简单的vi教程,10分钟包教会

    从第一次接触vi/vim到现在已经十几年了,在这个过程中,来来回回,反反复复,学习vi很多次了. 虽然关于vi的使用,我还远未达到"专家"的水平,但对于vi的使用,我有话说. 1. ...

  10. 软工作业-14组铁大FaceBook网站使用体验

    铁大facebook是面向铁道大学学生的一个空间网站,空间界面十分朴素,灰色的色调.基本可以满足日常的发动态需求,但也存在一些问题: 比如发动态不是很方便,必须要进入到某一个空间才能发动态 .就有一些 ...