ARTS Week 10
Dec 30, 2019 ~ Jan 5, 2020
Algorithm
Problem 88 Merge Sorted Array (合并两个有序数组) 题目链接
题目描述:给定两个有序数组 nums1,nums2,其长度分别为m,n。假设 nums1 有足够的空间(m+n),将 nums2 中的数组添加到已有的 nums1 数组中。不返回任何值。举例如下:
nums1 = [1,2,3,0,0,0], m = 3
nums2 = [2,5,6], n = 3
合并后的 nums1 = [1,2,2,3,5,6]
思路:在我做题时发现,实际输入的 nums1 后面会多 n 个0,因此要先去掉这些多余的0。而后便是从头开始遍历 nums1 和 nums2,若 nums2 某位置的元素小于等于 nums1 某位置的元素,那么则把 nums2 的相应元素插入到 nums1 的位置前面,若 nums2 某位置的元素大于 nums1 某位置的元素,那么 nums1 向前前进一个元素。最后,判断若是 nums1 先到达了末尾,那么把剩余的 nums2 元素都插入到 nums1 中。
通过的代码如下
class Solution:
def merge(self, nums1: List[int], m: int, nums2: List[int], n: int) -> None:
"""
Do not return anything, modify nums1 in-place instead.
"""
if n == 0:
pass
elif m == 0:
# 去除末尾多余的0
for tmp in range(n):
nums1.pop()
for i in range(n):
nums1.append(nums2[i])
else:
for tmp in range(n):
nums1.pop()
i = j = 0
while i != m and j != n:
if nums1[i] >= nums2[j]:
nums1.insert(i, nums2[j])
i += 1
j += 1
# 因为插入了新元素,nums1长度要增加一,即m=m+1
m += 1
else:
i += 1
if i == m:
for k in range(j, n):
nums1.append(nums2[k])
Review
本周继续 Review 每个程序员需要知道的97件事(英文名:97 Things Every Programmer Should Know)。原文链接。下面是本周的5个小内容:
- 关于注释(A Comment on Comments) 原文链接
我相信大家都明白注释的重要的性,在此我就不赘述为什么要写注释了。虽然现如今有 Javadoc 类似的工具可以解析特定格式的注释以生成文档。但这些远远不够,在某些难以理解的地方,让需要额外的注释来进行更好的解释。 - 注释代码无法表述的内容(Comment Only What the Code Cannot Say) 原文链接
注释和代码一样,都存在这好坏。注释的好坏与注释的多少无太多关系。有些阅读代码很容易理解便不需要注释,比如 if (a>b) // 当a大于b时。注释应该更多的侧重于简单地介绍代码功能,为什么代码要这样做,而不是具体的代码工作方式。 - 持续学习(Continuous Learning) 原文链接
持续学习是相当重要的,在如今的互联网上,提供了多种方式可用于学习,比如:阅读书籍/杂志/博客/文档,在互联网上阅读或解决他人提出的问题或者提出自己问题等待他人解答,加入当地组织,阅读他人的建议并思考和选择适合自己的遵循。 - 便利不是灵活性(Convenience Is not an -ility) 原文链接
API的设计要注重灵活性以应对可能会出现的需求变化等,而不是注重便利性,除非你的软件一旦完成将不再修改。API设计尤其要避开那些特殊性很强的功能,因为他们可能某时便不再需要了。 - 尽早部署(Deploy Early and Often) 原文链接
一般地,给客户部署和安装在项目结束之后。但这并不是一个好方法,因为有可能你会发现客户在使用后提出了新的要求或者是大幅度的需求变更。为了回避这一问题,可以在实现了一个简单的原型后,便可以给客户部署,虽然它无法用于实际生产环境,但客户可以体验它,尝试学习使用它,以及明白项目的进度,同时有问题/新的需求也会提出,这样未后面的开发留下可以回旋的余地。
Tips
Python中字符串方法str.lower(),str.upper(),str.title(),str.capitalize()的功能如下:
- str.lower():返回将字符串中所有的大写字符为小写的结果
- str.upper():返回将字符串中所有的小写字符为大写的结果
- str.title():返回将字符串“标题化”的结果(标题化指的是所有单词首字母大写,其余字母小写)
- str.capitalize():返回将字符串首字符大写,其余字母小写的结果
示例代码如下:
s0 = 'an apple A DAY keeps the doctor away.'
s1 = s0.lower()
s2 = s0.upper()
s3 = s0.title()
s4 = s0.capitalize()
print('s0 = ',s0)
print('s1 = ',s1)
print('s2 = ',s2)
print('s3 = ',s3)
print('s4 = ',s4)
'''
输出结果如下:
s0 = an apple A DAY keeps the doctor away.
s1 = an apple a day keeps the doctor away.
s2 = AN APPLE A DAY KEEPS THE DOCTOR AWAY.
s3 = An Apple A Day Keeps The Doctor Away.
s4 = An apple a day keeps the doctor away.
'''
Sharing
在 Review 部分中,尽早部署(Deploy Early and Often)的意义和做一个 demo 一样;便利和灵活性比较难以把握,盲目的追求开发时的便利性,很难适应变化性。但是,一味地追求灵活性会大大增加开发的难度;注释的内容要聚焦于WHAT your code does,而不是HOW,如有必要可以解释下WHY。
ARTS Week 10的更多相关文章
- ARTS 12.10 - 12.14
从陈皓博主的专栏里学到一个概念,争取可以坚持下去: 我在我的读者群中推荐出 ARTS 的任务,每个人每周一个 Algorithm,Review 一篇英文文章,总结一个工作中的技术 Tip,以及 Sha ...
- Arts打卡第10周
Algorithm.主要是为了编程训练和学习. 每周至少做一个 leetcode 的算法题(先从Easy开始,然后再Medium,最后才Hard). 进行编程训练,如果不训练你看再多的算法书,你依然不 ...
- Top 10 Universities for Artificial Intelligence
1. Massachusetts Institute of Technology, Cambridge, MA Massachusetts Institute of Technology is a p ...
- KDE声音服务器 arts
KDE声音服务器 arts arts介绍arts是KDE的核心声音系统,支持多音频流.全双工.网络声音请求.ALSA与OSS驱动后端.JACK声音服务器后端等扩展,它既是声音服务器,也 提供一套音频软 ...
- TOP 10 BEST LINUX GAMES RELEASED IN 2016
Gaming on Linux used to be a very rare phrase. But since the arrival of Steam on Linux, the Linux ga ...
- 【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_17_左耳听风-20190304~20190310
ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...
随机推荐
- 小小知识点(二十三)circularly symmetric complex zero-mean white Gaussian noise(循环对称复高斯噪声)
数学定义 http://en.wikipedia.org/wiki/Complex_normal_distribution 通信中的定义 在通信里,复基带等效系统的噪声是复高斯噪声,其分布就是circ ...
- 【DDD】持久化领域对象的方法实践
[toc] 概述 在实践领域驱动设计(DDD)的过程中,我们会根据项目的所在领域以及需求情况捕获出一定数量的领域对象.设计得足够好的领域对象便于我们更加透彻的理解业务,方便系统后期的扩展和维护,不至于 ...
- 机器学习回顾篇(14):主成分分析法(PCA)
.caret, .dropup > .btn > .caret { border-top-color: #000 !important; } .label { border: 1px so ...
- Centos7下创建和管理用户
centos服务管理主要命令是systemctl,centos7的服务不再放在/etc/init.d/下;而放在/usr/lib/systemd/system下,centos7系统中systemctl ...
- IO流之处理流用法总结
处理流之一:缓冲流1.为了提高数据读写的速度,Java API提供了带缓冲功能的流类,在使用这些流类时,会创建一个内部缓冲区数组,缺省使用8192个字节(8Kb)的缓冲区. 2.缓冲流要“套接”在相应 ...
- 原生javascript 基础动画函数封装(一)
<!DOCTYPE html> <html> <head> <title></title> <style type="tex ...
- 《C# 爬虫 破境之道》:概述
第一节:写作本书的目的 关于笔者 张晓亭(Mike Cheers),1982年出生,内蒙古辽阔的大草原是我的故乡. 没有高学历,没有侃侃而谈的高谈阔论,拥有的就是那一份对技术的执著,对自我价值的追求. ...
- BZOJ4559&P3270[JLoi2016]成绩比较
题目描述 \(G\)系共有\(n\)位同学,\(M\)门必修课.这\(N\)位同学的编号为\(0\)到\(N-1\)的整数,其中\(B\)神的编号为\(0\)号.这\(M\)门必修课编号为\(0\)到 ...
- Linux初始化Git环境
第一步:设置Git全局用户名和邮箱 git config --global user.name "你的用户名" git config --global user.email &qu ...
- 关于Matplotlib中No module named 'matplotlib.finance'的解决办法
最近在研究量化分析,需要用到matplotlib中的一个库,输入from matplotlib.finance import quotes_historical_yahoo_ohlc, candles ...