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

  1. ARTS 12.10 - 12.14

    从陈皓博主的专栏里学到一个概念,争取可以坚持下去: 我在我的读者群中推荐出 ARTS 的任务,每个人每周一个 Algorithm,Review 一篇英文文章,总结一个工作中的技术 Tip,以及 Sha ...

  2. Arts打卡第10周

    Algorithm.主要是为了编程训练和学习. 每周至少做一个 leetcode 的算法题(先从Easy开始,然后再Medium,最后才Hard). 进行编程训练,如果不训练你看再多的算法书,你依然不 ...

  3. Top 10 Universities for Artificial Intelligence

    1. Massachusetts Institute of Technology, Cambridge, MA Massachusetts Institute of Technology is a p ...

  4. KDE声音服务器 arts

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

  5. 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 ...

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

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

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

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

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

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

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

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

随机推荐

  1. linux下配置vnc-server 和gnome-session

    机器比较老,安装时间也十分久远,所以也不知道实验室系统当时是不是完全安装,最近需要使用vnc登录显示界面,结果问题就来了...没有安装vnc-server. (1)机器系统是rhel6.2的,所以就从 ...

  2. 扫描器是如何判定有xss漏洞的

    这个问题,看似简单,实则触及到很多人的知识盲区 我们都知道,弹窗就能判定这个页面存在xss, 那么扫描器是怎么判断的呢,或者说扫描器是怎么判断是否弹窗的呢 测试发现 当响应的头中content-typ ...

  3. 2013 ACM/ICPC Asia Regional Online —— Warmup2 ABEGKL

    HDU4716 A. A Computer Graphics Problem A题目描述 题意:输出手机剩余电量,保证给出的数是10的倍数. 题解:水题,按题意输出即可. 代码: #include & ...

  4. UIChatBox模块示例demo

    感谢论坛版主 马浩川 的分享. UIChatBox 模块是一个聊天输入框模块,开发者可自定义该输入框的功能.通过 open 接口可在当前 window 底部打开一个输入框,该输入框的生命属于当前 wi ...

  5. 盘它!!一步到位,Tensorflow 2的实战 !!LSTM下的股票预测(附详尽代码及数据集)

    关键词:tensorflow2.LSTM.时间序列.股票预测 Tensorflow 2.0发布已经有一段时间了,各种新API的确简单易用,除了官方文档以外能够找到的学习资料也很多,但是大都没有给出实战 ...

  6. spring Cloud-eureka的保护模式

    eureka的首页出现以下警告 EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY'RE NOT. REN ...

  7. 用Kolla在阿里云部署10节点高可用OpenStack

    为展现 Kolla 的真正实力,我在阿里云使用 Ansible 自动创建 10 台虚机,部署一套多节点高可用 OpenStack 集群! 前言 上次 Kolla 已经表示了要打 10 个的愿望,这次我 ...

  8. Knative 简介

    原文地址:https://yq.aliyun.com/articles/658800

  9. 玩转Django2.0---Django笔记建站基础五(模板)

    第五章 模板 Django作为web框架,需要一种很便利的方法去动态地生成HTML网页,因此有了模板这个概念.模板包含所需HTML的部分代码以及一些特殊语法 Django可以配置一个或多个模板引擎(甚 ...

  10. FluentData 学习 第一弹

    地址: http://fluentdata.codeplex.com/ 前世: FluentData 我们公司用的一个增删改查的里面的持久层.之前还不知道 这个持久层叫FluentData.  某天看 ...