思路分析:首先对序列进行排序,接着定义一个指向序列头的指针,逐次向后搜索,直至指针指向序列尾部。指针比较当前元素与下一元素是否相等(重复),相等时移除第一个元素,第二个元素倍乘,再对更新的序列重排序;不相等时,指针右移。
/**
* 功能:将无序序列调整为无重复元素的有序序列
* 去重规则:重复元素的第一个删除,第二个倍乘
* 说明:可以使用Arrays.asList(...)将数组转为List;
* @param lists 无序序列
* @return 无重复元素的有序序列
*/
public static List<Long> print(ArrayList<Long> lists) {
Collections.sort(lists); // 让初始数据有序
int i = 0;
while (true) {
if (i == lists.size() - 1) {
break;
}
int l = i + 1; // 相邻比较
if (lists.get(i).equals(lists.get(l))) {
// 移除两个数,添加一个数
lists.remove(i);
lists.add(lists.remove(i) * 2);
Collections.sort(lists); // 数据更新之后需要重排序
} else {
i = l; // 右移
}
}
return lists;
}