1)题目:从有序顺序中删除所有其值重复的元素,使表中所有元素的值均不同

2)思路:

该数组是有序的序列,所以重复的元素肯定是连一起的。从头到尾依次遍历数组,假设第一个在i位置重复的元素是a1,重复n1次,那么位移d=n1,最后一个a1元素后面的元素都向前移动d;接着从i=i+d开始向后依次遍历,找到第二个具有重复的元素a2,重复n2次,那么d=n1+n2,最后一个a2元素后面的元素向前移动d个位置....依次遍历下去,直到遍历完整个有序表。最后从表尾向前依次删除删除重复元素后空出来的d的元素空间。

3)代码:

源码中使用到的ArrrayList,是调用的是自己实现的ArrayList,自己实现的ArrayList源码地址:https://blog.csdn.net/u012441545/article/details/89667486

package com.sam.datastruct.arrayList;

public class P2_06 {
   public void function(ArrayList<Integer> list){
      int d = 0;
      int i = 0;
      while(i + d < list.size()){
         while(i + d < list.size() && list.get(i) == list.get(i + d)){
            ++d;
         }
         if (i + d <= list.size()) {
            list.update(list.get(i + d), ++ i);
         }
      }
      
      for(i = 0; i < d -1; ++i){
         list.remove();
      }
   }
   public static void main(String[] args) {
      P2_06 p = new P2_06();
      ArrayList<Integer> list = new ArrayList<>();
      list.initNotDecs(40);
      p.function(list);
      System.out.println(list.toString());
   }

}
Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐