算法:101.删除排序数组中的重复数字 II

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]有依赖,顺序错了结果就不对了。

小结

上面两种实现的优劣是显而易见的,第一种是长而且逻辑复杂,第二种“优雅”的多,复杂的逻辑判断有一种“坏代码的味道”

如果上一题中“直观”实现和仔细经过思考的实现差别还不是那么大的话,这一题跟上一题比较就非常明显了,所以代码不能仅满足解决问题的“翻译”,优化很重要,形成写代码的问题思考方式很重要。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180825G1E2H700?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券