数组 / 从排序数组中删除重复项
2019-07-02 本文已影响0人
原创迷恋者
包管理
在Intellij中,我使用包来管理这些题,根据大类将他们分成数组,字符串,树等。类的命名基本和方法的命名一致,一方面是懒得想其他名字,另一方面方法名也是最能够反映代码目的的。之前也试过用题目编号,但私以为这种方法无法传达充足的信息,不方便回看。
我的代码
我这部分的代码写得并不好,功能十分冗余,势必时间复杂度不会好看。我的逻辑是,利用Set天然排斥重复元素的特性,找到不重复的元素。第一次我直接将HashSet赋值给nums[],但是发现输出的元素是无序状态;直接针对数组排序也不行,因为会将后面重复的元素整到前面来。谷歌了一下Set排序,似乎都是先转换成Array,然后再利用Collections工具类中的sort方法排序。因此也多了一个Hashset赋值给ArrayList的操作。排序之后输出,一切就正常了。
优秀的代码
时间复杂度特别好的代码,通常都是对题目有着深刻的理解。比如上图的代码,使用两个指针,当指针指向的两个数不等时,两个指针同时后移一位;当指针指向的两数相等时,j会不断后移,直到找到两数不等的位置,然后i++;nums[i]=nums[j];可以认为i追踪的就是其中不等元素的数量。