数据结构--ArrayList06删除所有有序表中的重复元素
·
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());
}
}
更多推荐
所有评论(0)