思路
如果数组是无序的,如[1,2,-3,4,2,1,-3],我们使用遍历的方式分别拿到1,2和-3,符合题意要求,进入后序循环,挑选出2,1,-3,这实际上和第一次挑选的值是重复的,此时还需要和上一次记录值做一次比对动作来决定是否加入结果队列
如果数组是有序的,如[1,1,2,2,-3,-3,4],此时我们可以在遍历过程中直接跳过重复项挑选出1,2和-3,跳过的动作显然省去了多余的计算和比对过程,因此会更高效一些
故考虑将数组先进行一次sort排序
此时有两种可选方式:三次for循环每层向后拿一位分别作为a、b、c进行相加,或者,第一层拿a,第二层和第三层从剩余元素中从双端取b和c,显然方案二更高效
实现
网友评论