Jan 6, 2020 ~ Jan 12, 2020

Algorithm

Problem 108 Convert Sorted Array to Binary Search Tree (将有序数组转化为二叉搜索树) 题目链接

题目描述:给定一个有序数组,将其转换为一个高度平衡的二叉搜索树。高度平衡:对于树中任一结点,其左子树和右子树的高度不大于1。二叉搜索树:对于树中任一结点,其左子树所有结点的值小于等于该结点的值,其右子树所有结点的值大于等于该结点的值。例如给定数组为 [-10,-3,0,5,9],得到的高度平衡的二叉搜索树如下:

      0
/ \
-3 9
/ /
-10 5

思路为:因为题目要求高度平衡,那么说明左右子树结点数目应该相近,同时要求是高度平衡和二叉搜索树都是递归的定义,且给定的是一个有序数组,不难想到使用递归。递归的初始条件便是:数组中没有元素或者只有一个元素,没有元素返回 None 即可,只有一个元素,则用该元素的值构建一个树结点即可。若多于一个元素,可以用 nums[len(nums)//2] 构建根节点,之后用 nums[0: len(nums)//2] 和 nums[len(nums)//2+1: len(nums)] 分别构建左右子树。

通过的代码如下

# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None class Solution:
def sortedArrayToBST(self, nums: List[int]) -> TreeNode:
if len(nums) == 0:
return None
if len(nums) == 1:
node = TreeNode(nums[0])
return node
node = TreeNode(nums[len(nums)//2])
node.left = self.sortedArrayToBST(nums[0: len(nums)//2])
node.right = self.sortedArrayToBST(nums[len(nums)//2+1: len(nums)])
return node

Review

本周继续 Review 每个程序员需要知道的97件事(英文名:97 Things Every Programmer Should Know)。原文链接。下面是本周的5个小内容:

  • 区分业务异常和技术异常(Distinguish Business Exceptions from Technical) 原文链接

    技术异常取决有编程语言本身,比如大多数语言在访问超出数组索引的元素时,会抛出一个异常来告诉你出现了错误。而业务异常是根据业务规则确定的,比如,银行账户只有100元,但想要取出200元时就会产生的一个异常。无论是技术异常还是业务异常我们都需要正确的处理它。
  • 刻意练习(Do Lots of Deliberate Practice) 原文链接

    刻意练习不只是单单执行任务,完成任务。而是有意识的练习一提高执行任务的能力。刻意练习意味着重复,多次重复一达到掌握的程度。刻意练习那些已经掌握的东西毫无意义,刻意练习应该去练习那些不擅长,不熟悉的东西。
  • 领域特定语言(Domain-Specific Languages) 原文链接

    每一个领域都有其特定的术语,用于描述该领域特有的事物。领域特定语言(DSL)一般分为内部和外部:内部DSL是通用编程语言编写而成的,内部DSL封装了现有的API,库和业务代码,并且对外部提供必要的接口。外部DSL是语言的文本或图形表达,其可以包括词法分析器,语法分析器等。其中将外部DSL采用XML、Json等格式也很常见。
  • 不要害怕犯错误(Don't Be Afraid to Break Things) 原文链接

    无论一个多么有经验的人都可能会犯错误,通过犯错误进而改正错误有助于提高自己。当然犯错误也可能会带来问题,比如受到批评、惩罚等,所以可能存在害怕出错的心理。在软件开发过程中,有一个比较好的减少错误的办法便是,一次只进行小量的改动,而立马进行测试,通过这样的小而快的迭代,可以避免犯下大的错误。
  • 不要对你的临时数据不满意(Don't Be Cute with Your Test Data) 原文链接

    在代码中编写任何文本时(无论是注释,日志,对话框还是测试数据),请始终问问自己,如果公开,它将如何显示。它将全面保存一些信息。

Tips

Python中字符串方法str.ljust(),str.rjust(),str.center(),str.strip(),str.lstrip(),str.rstrip()的功能分别如下:

  • str.ljust() :填充字符串,让其左对齐。默认用空格填充
  • str.rjust() :填充字符串,让其右对齐。默认用空格填充
  • str.center():填充字符串,让其居中。默认用空格填充
  • str.strip() :截掉字符串两边的指定字符,默认是空白字符集合
  • str.lstrip():截掉字符串左边的指定字符,默认是空白字符集合
  • str.rstrip():截掉字符串右边的指定字符,默认是空白字符集合

    空白字符集合为:{ ' ', '\t', '\n', '\v', '\f', '\r' }

    示例如下:
s0 = 'hello'
s11 = s0.ljust(10)
s12 = s0.ljust(10,'!')
s21 = s0.rjust(10)
s22 = s0.rjust(10,'!')
s31 = s0.center(10)
s32 = s0.center(10,'!') print('s0 = ',s0)
print('s11 = ',s11)
print('s12 = ',s12)
print('s21 = ',s21)
print('s22 = ',s22)
print('s31 = ',s31)
print('s32 = ',s32) print('s12.lstrip() = ',s12.lstrip('!'))
print('s12.rstrip() = ',s12.rstrip('!'))
print('s22.lstrip() = ',s22.lstrip('!'))
print('s22.rstrip() = ',s22.rstrip('!'))
print('s32.strip() = ',s32.strip('!'))
print('s32.strip() = ',s32.strip()) '''
输出结果如下:
s0 = hello
s11 = hello
s12 = hello!!!!!
s21 = hello
s22 = !!!!!hello
s31 = hello
s32 = !!hello!!!
s12.lstrip() = hello!!!!!
s12.rstrip() = hello
s22.lstrip() = hello
s22.rstrip() = !!!!!hello
s32.strip() = hello
s32.strip() = !!hello!!!
'''

Sharing

在 Review 部分中,提到技术异常和业务异常的区别,作为程序员,找到的技术异常比业务异常容易不少,但是业务异常同样值得关注,如果不慎就会带来巨大的损失。

ARTS Week 11的更多相关文章

  1. 地区sql

    /*Navicat MySQL Data Transfer Source Server : localhostSource Server Version : 50136Source Host : lo ...

  2. ARTS 1.7 - 1.11

    每周一个 Algorithm,Review 一篇英文文章,总结一个工作中的技术 Tip,以及 Share 一个传递价值观的东西! Algorithm: 学习算法 题目: https://leetcod ...

  3. arts打开第11周

    给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写. 说明:本题中,我们将空字符串定义为有效的回文串. 示例 1: 输入: "A man, a plan, a c ...

  4. 小白的python之路10/31&11/1文件操作系统

    文件操作系统的介绍 ext4的superblock块是超级快,innode 块是专门存放文件信息的, block count将硬盘做成block块,对操作系统而言写在block块上就可了,eg:文件1 ...

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

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

  6. 【ARTS】01_08_左耳听风-20181231~20190106

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

  7. 【ARTS】01_06_左耳听风-20181217~1223

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

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

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

  9. 【ARTS】01_44_左耳听风-201900909~201900915

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

随机推荐

  1. 关于opengl中的矩阵平移,矩阵旋转,推导过程理解 OpenGL计算机图形学的一些必要矩阵运算知识

    原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/12166896.html 为什么引入齐次坐标的变换矩阵可以表示平移呢? - Yu Mao的回答 ...

  2. ocx控件的坑

    前言 这还是第一次写博客,以前太懒了,现在发现是很有必要记录下这些经验和问题的.最近项目中有个需求(报表单据需要客户签名,连接签字板,把签名单据同步到服务器上),需要和硬件交互,当时硬件商提供了ocx ...

  3. 【转】[IT综合面试]牛人整理分享的面试知识:操作系统、计算机网络、设计模式、Linux编程,数据结构总结

    感谢IT面试群 S-北京-陈磊 的整理分享.   基础篇:操作系统.计算机网络.设计模式         提高篇:WIN32.MFC与Linux 算法篇:算法与数据结构           一:操作系 ...

  4. 案例分析丨H&M用设计冲刺将App研发周期缩短为6个月

    案例背景 H&M是一家来自瑞典的时装公司,1947年成立.截至2018年6月,H&M 分店遍布全球 68 个国家和地区,分店数目为 4338 间. 作为快速服装生产商,H&M的 ...

  5. js去除字符串的前后空白

    使用gravatar生成邮箱的头像时需要对邮箱地址哈希化,其中需要去除邮箱地址的首尾空白,查找了一些资料,总结一下 使用 js 提供的函数 trim() trim() 方法会删除一个字符串两端的空白字 ...

  6. js的内存泄漏场景、监控以及分析

    内存泄漏 Q:什么是内存泄漏? 字面上的意思,申请的内存没有及时回收掉,被泄漏了 Q:为什么会发生内存泄漏? 虽然前端有垃圾回收机制,但当某块无用的内存,却无法被垃圾回收机制认为是垃圾时,也就发生内存 ...

  7. Epplus Excel 导入 MSSQL 数据库

    效果: 下载EXE     源码

  8. JS中如何比较两个数组,取得数组二相对于数组一新增和去除的元素

    //数组二相对于数组一所新增的数据 function add_msg(a,b){ return a.filter(function(i){ return b.indexOf(i) === -1 }) ...

  9. 使用Merkle树检测数据不一致(翻译)

    背景 Cassandra的逆熵功能使用Merkle树来检测副本之间的数据不一致. 定义 Merkle树是一种哈希树,其中的叶子包含各个数据块的哈希值,父节点包含其各自的子节点的哈希值.它提供了一种有效 ...

  10. 倍增LCA模板

    //https://www.luogu.org/problemnew/show/P3379#include<bits/stdc++.h> #define maxn 500010 #defi ...