数组中元素的删除 不打乱原来的顺序!!!

九千里 2017-04-07 10:00:31
求解
时间复杂度最小


我觉得用链表做好像更快
p = head->next ;
while(p)
{
q = p;
t = p->next;
while(t)
{
if(t->data==p->data)
{
q->next = t->next;
free(t);
t = q->next;
n--;
}
else
{
t = t->next;
q =q ->next;
}
}
p = p->next;
}
...全文
441 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
九千里 2017-04-15
  • 打赏
  • 举报
回复
谢谢大神们!!
自信男孩 2017-04-11
  • 打赏
  • 举报
回复
引用 3 楼 cyfcsd 的回复:
[quote=引用 2 楼 cfjtaishan 的回复:] [quote=引用 1 楼 cyfcsd 的回复:] 用链表确实是比数组要快,时间复杂度为O(n^2) 如果要继续优化可以再做一个链表出来,用来表示“以及存在的元素,然后这个链表是排好序的,这样可以用二分查找来确定元素是否已经存在,时间复杂度可以降为O(nlogn)” 再如果数据范围比较小,可以做一个哈希表,通过标记再判断的方法判断一个元素是不是重复的,这样时间复杂度可以降低为O(n)
删除数组中的一个元素,怎么复杂度是O(n^2)呢?不是O(n)吗?因为遍历一次,直接找到对应的节点,然后把后面的节点和前面的节点连接上就好了,不会是O(n^2)[/quote] 不是删除一个特定元素,是删除所有重复元素。。。。[/quote] 嗯,没得说O(n^2)
flying_music 2017-04-11
  • 打赏
  • 举报
回复
引用 2 楼 cfjtaishan 的回复:
[quote=引用 1 楼 cyfcsd 的回复:] 用链表确实是比数组要快,时间复杂度为O(n^2) 如果要继续优化可以再做一个链表出来,用来表示“以及存在的元素,然后这个链表是排好序的,这样可以用二分查找来确定元素是否已经存在,时间复杂度可以降为O(nlogn)” 再如果数据范围比较小,可以做一个哈希表,通过标记再判断的方法判断一个元素是不是重复的,这样时间复杂度可以降低为O(n)
删除数组中的一个元素,怎么复杂度是O(n^2)呢?不是O(n)吗?因为遍历一次,直接找到对应的节点,然后把后面的节点和前面的节点连接上就好了,不会是O(n^2)[/quote] 不是删除一个特定元素,是删除所有重复元素。。。。
自信男孩 2017-04-10
  • 打赏
  • 举报
回复
引用 1 楼 cyfcsd 的回复:
用链表确实是比数组要快,时间复杂度为O(n^2) 如果要继续优化可以再做一个链表出来,用来表示“以及存在的元素,然后这个链表是排好序的,这样可以用二分查找来确定元素是否已经存在,时间复杂度可以降为O(nlogn)” 再如果数据范围比较小,可以做一个哈希表,通过标记再判断的方法判断一个元素是不是重复的,这样时间复杂度可以降低为O(n)
删除数组中的一个元素,怎么复杂度是O(n^2)呢?不是O(n)吗?因为遍历一次,直接找到对应的节点,然后把后面的节点和前面的节点连接上就好了,不会是O(n^2)
flying_music 2017-04-08
  • 打赏
  • 举报
回复
用链表确实是比数组要快,时间复杂度为O(n^2) 如果要继续优化可以再做一个链表出来,用来表示“以及存在的元素,然后这个链表是排好序的,这样可以用二分查找来确定元素是否已经存在,时间复杂度可以降为O(nlogn)” 再如果数据范围比较小,可以做一个哈希表,通过标记再判断的方法判断一个元素是不是重复的,这样时间复杂度可以降低为O(n)

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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