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. Vuex入门实践(上)

    一.前言 vuex被称为是专为vue应用程序开发的的状态管理模式.它的作用使用一句话描述就是:让组件之间可以共享数据 话不多少,先抛开概念,我们写一个简单的示例感受一波. 二.项目开发环境 项目开发环 ...

  2. 网络爬虫简单介绍(python)

    一.简介 爬虫就是利用代码大量的将网页前端代码下载下来使用的一种程序,一般来说常见的目的为下: 1.商业分析使用:很多大数据公司都会从利用爬虫来进行数据分析与处理,比如说要了解广州当地二手房的均价走势 ...

  3. Scala实践2

    一.Scala基本类型和操作 1.1  基本类型 Scala的基本类型与Java基本类型相同,都是byte.short.int.long.char.string.float.double.boolea ...

  4. SnowflakeId雪花ID算法,分布式自增ID应用

    概述 snowflake是Twitter开源的分布式ID生成算法,结果是一个Long型的ID.其核心思想是:使用41bit作为毫秒数,10bit作为机器的ID(5个bit是数据中心,5个bit的机器I ...

  5. Spring Boot2 系列教程 (七) | 使用 Spring Data JPA 访问 Mysql

    前言 如题,今天介绍 Spring Data JPA 的使用. 什么是 Spring Data JPA 在介绍 Spring Data JPA 之前,首先介绍 Hibernate . Hibernat ...

  6. 区间dp - 括号匹配并输出方案

    Let us define a regular brackets sequence in the following way: 1. Empty sequence is a regular seque ...

  7. 通过HttpClient的方式去Curd数据⭐⭐⭐⭐

    在网上看博客的时候,看到这系列的文章,别特帮,强烈推荐 里面有一章节是通过HttpClient的方法去更新数据的,新颖,记录下. ⭐⭐⭐1:创建一个Model数据模型 这个类创建一个数据对象,Http ...

  8. windows服务搭建(VS2019创建Windows服务不显示安装组件)

    1.创建windows服务应用 2.右键查看代码 3.写个计时器Timer  using System.Timers; 如上图,按tab键快速操作  会自动创建一个委托 改为下边的方式,打印日志来记录 ...

  9. 《Java核心技术》 JVM指令集

    https://www.jianshu.com/p/bc91c6b46d7b

  10. 对标Eureka的AP一致性,Nacos如何实现Raft算法

    一.快速了解Raft算法 Raft 适用于一个管理日志一致性的协议,相比于 Paxos 协议 Raft 更易于理解和去实现它. 为了提高理解性,Raft 将一致性算法分为了几个部分,包括领导选取(le ...