数组查找和插入问题

向多条绿色裤衩努力 2011-05-20 10:40:30
1、有一个数据范围在10000---30000之间

2、数组的数据是从数据范围查找添加,不一定按顺序从数据范围添加数据,以为这个数组的某些数据在某个时刻会被动态删除

3、要做的是:如何找出数组没有在这个范围的数据,然后添加一个到数组当中,数组中的每个元素都是唯一的。
例子:
array1[1000, 10001, 10005, 10020, 10002, 100010]
查找到10003然添加的数组中,变成
array1[1000, 10001, 10005, 10020, 10002, 100010, 10003]
再查找一次的话能找出100004一次类推。
查找一次,添加一次。
...全文
212 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
gdwb4600 2011-05-30
  • 打赏
  • 举报
回复
用一个大小20000的数组记录记录某数据出现的次数
超级大笨狼 2011-05-29
  • 打赏
  • 举报
回复
哈希表啊。
serlvet 2011-05-28
  • 打赏
  • 举报
回复
很明显这是一个Obserable的应用
你的数组是一个Obersable,范围是一个Observer
每当数组取一个数,通知范围删除,数组删除时,通知范围添加,这样你取数值时,就不需要去考虑查找的问题,只需要每次都取范围的第一个数值就可以了
public static void main(String args[]) {
MList ml = MList.getInstance();
MObserver mb = new MObserver(20,30);
ml.addObserver(mb);
for(int i=20;i<25;i++){
ml.add(i);
}
ml.del(Integer.valueOf(22));
for(int i=0 ;i<ml.size();i++){
System.out.println("m=" + ((Integer)ml.get(i)));
}
for(int i=0 ;i<mb.size();i++){
System.out.println("scopes=" + ((Integer)mb.get(i)));
}
}

运行结果是:
m=20
m=21
m=23
m=24
scopes=25
scopes=26
scopes=27
scopes=28
scopes=29
scopes=30
scopes=22
busybeeCS 2011-05-27
  • 打赏
  • 举报
回复
[Quote=引用楼主 jarun 的回复:]
1、有一个数据范围在10000---30000之间

2、数组的数据是从数据范围查找添加,不一定按顺序从数据范围添加数据,以为这个数组的某些数据在某个时刻会被动态删除

3、要做的是:如何找出数组没有在这个范围的数据,然后添加一个到数组当中,数组中的每个元素都是唯一的。
例子:
array1[1000, 10001, 10005, 10020, 10002, 100010]
……
[/Quote]
第二条是什么意思啊
busybeeCS 2011-05-27
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 pmars 的回复:]
map在查找的时候会自动添加进去,不知道符合lz的意思不?
[/Quote]
可以先count再insert
pandm 2011-05-27
  • 打赏
  • 举报
回复
我连题目都没看懂。。。
nickywang2004 2011-05-27
  • 打赏
  • 举报
回复
你用位图,算偏移量不是一次就可以找到这个数有没有存在吗?这速度还不快?

[Quote=引用 10 楼 jarun 的回复:]
引用 8 楼 pmars 的回复:

引用 5 楼 jarun 的回复:

引用 4 楼 pmars 的回复:

map在查找的时候会自动添加进去,不知道符合lz的意思不?

我是用java的map保存的,好像没有查找添加这个吧?

没有的话也没有关系,手动去添加了就行了,如果没有找到的话就添加啊!!!


你的意思是一个循环,用MAP来查找,找不到就添加吧?这样的效率高……
[/Quote]
chxfalling 2011-05-27
  • 打赏
  • 举报
回复
我推荐一个高级数据结构,树状数组~
pmars 2011-05-20
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 jarun 的回复:]

引用 8 楼 pmars 的回复:

引用 5 楼 jarun 的回复:

引用 4 楼 pmars 的回复:

map在查找的时候会自动添加进去,不知道符合lz的意思不?

我是用java的map保存的,好像没有查找添加这个吧?

没有的话也没有关系,手动去添加了就行了,如果没有找到的话就添加啊!!!


你的意思是一个循环,用MAP来查找,找不到就添加吧?这样的效率……
[/Quote]
我以为你想找到那个数字出现的次数。。。囧!!!
pmars 2011-05-20
  • 打赏
  • 举报
回复
你是想知道某个范围内的数据量把?

树状数组可以解决这个问题,如果内存够的话
如果内存不够,那么看一下线段树,也可以解决!
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 pmars 的回复:]

引用 5 楼 jarun 的回复:

引用 4 楼 pmars 的回复:

map在查找的时候会自动添加进去,不知道符合lz的意思不?

我是用java的map保存的,好像没有查找添加这个吧?

没有的话也没有关系,手动去添加了就行了,如果没有找到的话就添加啊!!!
[/Quote]

你的意思是一个循环,用MAP来查找,找不到就添加吧?这样的效率高不?
  • 打赏
  • 举报
回复
问题是:怎么知道已经用去了数据范围内的数?

比如10005添加在map中了,下一个要添加进来的怎才能知道是10000?
pmars 2011-05-20
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 jarun 的回复:]

引用 4 楼 pmars 的回复:

map在查找的时候会自动添加进去,不知道符合lz的意思不?

我是用java的map保存的,好像没有查找添加这个吧?
[/Quote]
没有的话也没有关系,手动去添加了就行了,如果没有找到的话就添加啊!!!
fenix124 2011-05-20
  • 打赏
  • 举报
回复
用位图的方式
pmars 2011-05-20
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 jarun 的回复:]

引用 4 楼 pmars 的回复:

map在查找的时候会自动添加进去,不知道符合lz的意思不?

我是用java的map保存的,好像没有查找添加这个吧?
[/Quote]
java的还真不知道


map<int,int> mint ;
int k ;
while ( cin>>k )
{
cout<<mint[k]<<endl ;
++ mint[k];
for(map<int,int>::iterator iter = mint.begin() ;
iter != mint.end() ; ++ iter )
cout<<iter->first<<' '<<iter->second<<endl;
}
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 pmars 的回复:]

map在查找的时候会自动添加进去,不知道符合lz的意思不?
[/Quote]
我是用java的map保存的,好像没有查找添加这个吧?
pmars 2011-05-20
  • 打赏
  • 举报
回复
map在查找的时候会自动添加进去,不知道符合lz的意思不?
pmars 2011-05-20
  • 打赏
  • 举报
回复
用map来实现吧map<int,int>
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 fenix124 的回复:]
用一个大小20000的数组记录记录某数据出现的次数。
[/Quote]
你没明白我的意思。如果是100---900000呢?
问题的本质不在数据范围,是查找数组,查找数据添加的问题
fenix124 2011-05-20
  • 打赏
  • 举报
回复
用一个大小20000的数组记录记录某数据出现的次数。

33,007

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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