有序数组去掉重复数据项,求良方..

csdpz 2012-07-10 11:46:22
一个有序的数组中删除掉重复的数据项而不破坏其有序性。一种方法是没发现一个重复的数据项,就从这个位置开始到数组结尾都向前移动一个位置,但是这就导致消耗很长的O(n^2)的时间级。要求设计算法,不论有多少重复数据,要确保数据项最多只能移动一次。这样算法就只消耗O(n)数量级额时间。
...全文
213 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
csdpz 2012-07-11
  • 打赏
  • 举报
回复
上面说错了,差好多的应该。不过就算这样,如果重复数据项很多,移动很频繁,耗时很严重吧
csdpz 2012-07-11
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
从头到尾找重复,删掉的位置就先空着,最后整体挪一次。。。。。。
[/Quote]
这样 跟 题目描述的那里其实 也差不多的...
结贴是美德 2012-07-11
  • 打赏
  • 举报
回复
从头到尾找重复,删掉的位置就先空着,最后整体挪一次。。。。。。
beiouwolf 2012-07-11
  • 打赏
  • 举报
回复
其实...在java里这个算法基本没有太多的效率问题
java并不直接复制对象,除非是object clone操作
除此以外都是复制引用

所以,既然不存在对象复制到问题,算法时间消耗也无需太多考虑了
wangdong20 2012-07-11
  • 打赏
  • 举报
回复
声明一个ArrayList,然后遍历你的有序数组,
遍历时以if(list[i] == arraylist.get(arraylist.size()))为条件
如果满足就说明重复,跳过当前遍历
否则就将这个元素加到ArrayList里
另外注意第一次遍历的数组越界问题
ZZZ5512536 2012-07-11
  • 打赏
  • 举报
回复
要求写算法啊.如果没这要求,倒可以把数据放Set里,再把数据放回数组里.
csdpz 2012-07-10
  • 打赏
  • 举报
回复
[Quote=引用楼主 的回复:]
一个有序的数组中删除掉重复的数据项而不破坏其有序性。一种方法是没发现一个重复的数据项,就从这个位置开始到数组结尾都向前移动一个位置,但是这就导致消耗很长的O(n^2)的时间级。要求设计算法,不论有多少重复数据,要确保数据项最多只能移动一次。这样算法就只消耗O(n)数量级额时间。
[/Quote]
以什么为key和value呢?还能保证有序性吗?
倒是可以用List就是不晓得复杂度怎么算...
octopus1 2012-07-10
  • 打赏
  • 举报
回复
转到map里处理呢

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧