每周一道算法题,提升自己的逻辑思维
不知不觉已经是第三周了,我知道你们其实都并不爱看每周的这道算法题,既枯燥还无趣,所以每次写这文的时候,都会穿插些别的内容,来中和一下这种枯燥乏味的算法题
今天啰嗦点什么呢?先聊聊,为什么要写这个每周算法题系列,后面写算法题的时候再说说面试时遇见算法题时的解题思路
为什么写这个系列
LeetCode的题库,现在共有1020道题,把easy与hard难度的题目去掉,只留下medium难度的都还有608道题,按咱们这个进度,每周一道题,一年52周,单独就是写中等难度的,我要写近12年才能写完!
所以,写这个系列的目的并不是为了让我们把每一个题都刷一遍,然后大家都面试无忧,而是希望通过这个系列的文章,每周都能锻炼一下大家解决问题的能力
LeetCode上的题目有一个好处,大多数的题目不是为了解题而解题,基本都影射着具体的使用场景,而有些时候为了不然题目过于简单,所以故意提了一些性能要求,比如时间复杂度,空间复杂度的限制,其实这样也是更好的锻炼我们对代码性能的掌控力
我们绝大多数的码农都是在写业务代码,CTRL+C、CTRL+V用的不亦乐乎,包括我自己
所以平时的工作用不到太多的「算法」去解决问题,所以偶尔遇到一次时,就化身为Stack Overflow或者Github的搬运工,实在不行就乱七八糟的写个一大通,晦涩难懂的同时还性能低下
每周看看算法题这样的好处很明显,可以长期的保持我们的思维活跃,当遇到问题的时候,我们很容易的能找到思路,当有思路后,就算实现不出来,再去Google或者百度,效率比不知从何下手要高十倍不止
我希望你也能与我一起思考如何解决,因为我并不是算法工程师,只是一个跟你一样的普通人,我在文中写的解决方案并不是最好的,如果你有更好的解决思路,不妨加我好友一起沟通交流一下
现在这个公众号还没有留言功能,现在在开发一个留言小程序,用于提高我们的互动,到时候上线了,大家有更好的解题思路也能更方便的交流了
算法题的思路来源
本周算法题是LeetCode题号#80,名字为Remove Duplicates from Sorted Array II
题目要求跟上周相比还是稍微加大了一点难度,毕竟上周为了介绍Go语言,所以就选了个Easy的题目
本周的算法题可以说是上周的算法题的变形,加大了一点难度
先来看看题目要求
Given a sorted array nums, remove the duplicates in-place such that duplicates appeared at most twice and return the new length.
Do not allocate extra space for another array, you must do this by modifying the input array in-place with O(1) extra memory.
这次还是把英文原介绍丢上来比较好,毕竟单纯的由我自己来说,有可能就变味了
不信?那我用自己的话给你们介绍一遍
给你一个已经排序好的数组,返回一个新的数组长度,在这个长度内,同一个值最多存在2次。要求&