将无序序列调整为无重复元素的有序序列

思路分析:首先对序列进行排序,接着定义一个指向序列头的指针,逐次向后搜索,直至指针指向序列尾部。指针比较当前元素与下一元素是否相等(重复),相等时移除第一个元素,第二个元素倍乘,再对更新的序列重排序;不相等时,指针右移。

   /**
     * 功能:将无序序列调整为无重复元素的有序序列
     * 去重规则:重复元素的第一个删除,第二个倍乘
     * 说明:可以使用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;
    }

猜你喜欢

转载自blog.csdn.net/for62/article/details/107669651