https://www.lintcode.com/problem/remove-duplicates-from-sorted-array-ii/description
描述
跟进“删除重复数字”:
如果可以允许出现两次重复将如何处理?
样例
给出数组A =[1,1,1,2,2,3],你的函数应该返回长度5,此时A=[1,1,2,2,3]。
如果是参照 上一题 第一个实现,那么本题可能会是如下实现:
上面的代码还是在内部使用循环查找,计数。外部循环结束后还要对尾部再进行处理。还是循环内部代码有冗余。
如果是参照上一题第二个实现的,那么代码就会简洁很多,具体如下:
这里要注意的是,if判断里count的三元表达式一定要放在前面,因为它对nums[size-1]有依赖,顺序错了结果就不对了。
小结
上面两种实现的优劣是显而易见的,第一种是长而且逻辑复杂,第二种“优雅”的多,复杂的逻辑判断有一种“坏代码的味道”
如果上一题中“直观”实现和仔细经过思考的实现差别还不是那么大的话,这一题跟上一题比较就非常明显了,所以代码不能仅满足解决问题的“翻译”,优化很重要,形成写代码的问题思考方式很重要。
领取专属 10元无门槛券
私享最新 技术干货