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

原文地址:https://www.cnblogs.com/mengxinayan/p/12288025.html

时间: 2024-10-09 00:56:25

ARTS Week 10的相关文章

百度粉红色风科技上来看积分

http://www.ebay.com/cln/508gua_gvqjq/-/167266747010/2015.02.10 http://www.ebay.com/cln/jhu2290/-/167423283013/2015.02.10 http://www.ebay.com/cln/cha.m22/-/167166250017/2015.02.10 http://www.ebay.com/cln/fenyu56/-/167382503016/2015.02.10 http://www.eb

百度附件是分开就爱死了开发了

http://www.ebay.com/cln/m_m3154/-/167249028014/2015.02.10 http://www.ebay.com/cln/zhsu412/-/167238372018/2015.02.10 http://www.ebay.com/cln/mi.han5/-/167545028015/2015.02.10 http://www.ebay.com/cln/lij5252/-/167389481016/2015.02.10 http://www.ebay.co

Arts打卡第10周

Algorithm.主要是为了编程训练和学习. 每周至少做一个 leetcode 的算法题(先从Easy开始,然后再Medium,最后才Hard). 进行编程训练,如果不训练你看再多的算法书,你依然不会做算法题,看完书后,你需要训练. 关于做Leetcode的的优势,你可以看一下我在coolshell上的文章 Leetcode 编程训练 - 酷 壳 - CoolShell. Review:主要是为了学习英文,如果你的英文不行,你基本上无缘技术高手. 所以,需要你阅读并点评至少一篇英文技术文章,

error:Please check whether you installed aRts correctly or use

编译kdelibs-3.5.10.tar.gz checking whether uic supports -L ... yes checking whether uic supports -nounload ... yes checking if Qt needs -ljpeg... no checking for rpath... yes checking for KDE... will be installed in /usr/local/kdelibs3checking grepping

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 gaming community is all charged up because of the games being natively developed for Linux instead of being dependent on third-party applications like W

KDE声音服务器 arts

arts介绍arts是KDE的核心声音系统,支持多音频流.全双工.网络声音请求.ALSA与OSS驱动后端.JACK声音服务器后端等扩展,它既是声音服务器,也 提供一套音频软件的开发类库.对于KDE3.x系统来说arts是不可缺少的一部分,KDE中几乎所有与声音有关的特性都和arts有平滑稳定的集成.由于arts是其作者的个人秀,在2004年底作者宣布终止对arts的维护后它已经很难再作出进一步的突破,这之后的更新大多都是其他志愿者的零敲碎 打,而且其艰涩的开发框架对后来者也是一个接手门槛.尽管a

苹果再放大招 3月10日举行特别发布会

北京时间2月27日消息称,苹果周四向媒体界发出邀请函—北京时间3月10日凌晨1点(北美太平洋时间3月9日上午十点)在美国旧金山召开一次特别发布会. 邀请函延续了苹果一贯简约的特点,而此次特别发布在旧金山芳草地艺术中心(Yerba Buena Center for the Arts)举行,其主题为“spring forward”(春天前行).这是因为美国将在3月8日将进入夏时制.钟表向前拨快一小时.这一主题是否暗示着Apple Watch将会提前上市呢? 有开发者指出,开发社区已经至少在三个月前就

Top 10 Free Antivius

1) Avast Antivirus is a family of internet security applications developed by Avast for Microsoft Windows, macOS, Android and iOS. The Avast Antivirus products include free and proprietary versions that provide computer security, browser security, an

[JVM] - 继10进制的java.lang.Object查看之后

cmd清除命令:cls 之后查阅了其它博客,发现这位大神同样也在做JVM,并且我很希望用它的10进制转16进制类来测试一下该解析的10进制是否对应着Object的16进制呢? 这位大神的10进制转16进制代码: import java.io.BufferedReader; import java.io.File; import java.io.FileReader; public class Test { public static String txt2String(File file){ S