| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1210 人关注过本帖
标题:很白痴的一个问题!!!囧。。。
只看楼主 加入收藏
cb_1212
Rank: 1
等 级:新手上路
帖 子:126
专家分:5
注 册:2011-4-28
收藏
得分:0 
回复 7楼 cb_1212
呃呃 我明白你的意思了。但是可以用折半查找的办法写么?我写的那个怎么改才对呢?
用顺序查找很费时。
2011-11-19 15:06
jcw08120110
Rank: 8Rank: 8
来 自:南京
等 级:蝙蝠侠
帖 子:272
专家分:742
注 册:2009-6-8
收藏
得分:0 
哥们我的程序是最省时间的 你得程序虽然 时间复杂度是lgn 但是前提是你得数组必须是排好序的! 懂??????

君生我未生 我生君以老
2011-11-19 15:07
cb_1212
Rank: 1
等 级:新手上路
帖 子:126
专家分:5
注 册:2011-4-28
收藏
得分:0 
回复 12楼 jcw08120110
呃呃 我懂了。。。
好吧。。但是用折半查找一定要先排序的是吧。。。我有点不明白了,既然这样直接用顺序查找就好了,折半查找还有什么意义啊。。。
2011-11-19 15:11
jcw08120110
Rank: 8Rank: 8
来 自:南京
等 级:蝙蝠侠
帖 子:272
专家分:742
注 册:2009-6-8
收藏
得分:0 
没办法因为你写得东西就是乱得 只能先排好序再查找!!!!!!!!

君生我未生 我生君以老
2011-11-19 15:12
czz5242199
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:4
帖 子:660
专家分:2400
注 册:2011-10-26
收藏
得分:20 
很明显,这题的标准做法是先排序,然后每次二分查找,这样时间复杂度是O((n+m)logn),如果直接顺序查找时间复杂度是O(nm),肯定会超时的
2011-11-19 15:16
cb_1212
Rank: 1
等 级:新手上路
帖 子:126
专家分:5
注 册:2011-4-28
收藏
得分:0 
回复 12楼 jcw08120110
Time Limit Exceed at Test 2

这是你的提交上去了。。。
其实你可以想想,数组长度是100000  那不是一般的大啊。。不超时才怪。。。。。。
还是要用二分的,而且要用到排序。。。。。
2011-11-19 15:19
cb_1212
Rank: 1
等 级:新手上路
帖 子:126
专家分:5
注 册:2011-4-28
收藏
得分:0 
回复 15楼 czz5242199
确实。。。。已经超时了。。。
用qsort排序试试。。
2011-11-19 15:20
jcw08120110
Rank: 8Rank: 8
来 自:南京
等 级:蝙蝠侠
帖 子:272
专家分:742
注 册:2009-6-8
收藏
得分:0 
上楼~ 排序要用时间吧? 先排序再查找 还是直接查找 你说那个省时间?排序最好的时间复杂度我用快速排序 n*lgn 查找我用二分法查找也要用n*lgn 一起就是  2*n*lgn  而我直接查找 只要 n  你说那个快?????

君生我未生 我生君以老
2011-11-19 15:21
jcw08120110
Rank: 8Rank: 8
来 自:南京
等 级:蝙蝠侠
帖 子:272
专家分:742
注 册:2009-6-8
收藏
得分:0 
回复 17楼 cb_1212
不会别乱说 什么超时 明明你自己数组传递有问题 你哪里看到我要10000个数据查找了 我只要查找n个数据~ 你得参数传递是什么 数组赋值传递???? 为什么不用指针传递 自己用数组传递数据最后慢了还说我的程序有问题~~~~

君生我未生 我生君以老
2011-11-19 15:23
jcw08120110
Rank: 8Rank: 8
来 自:南京
等 级:蝙蝠侠
帖 子:272
专家分:742
注 册:2009-6-8
收藏
得分:0 
程序代码:
#include<iostream>
using namespace std;

bool search(int key,int min,int max,int* a) // 这里你传递指针
{
    while(min<=max)
    {
        if(key == a[min++]) return 0;
    }
    return 1;   //查找失败返回-1
}

int main()
{
    int i,n,m,key;
    int a[100000];
    scanf("%d%d",&n,&m);
    for(i=0;i<n;i++)
        scanf("%d",&a[i]);
    while(m--)
    {
        scanf("%d",&key);
        if(search(key,0,n-1,a))
            printf("NO\n");
        else printf("YES\n");
    }
    return 0;
} 

君生我未生 我生君以老
2011-11-19 15:26
快速回复:很白痴的一个问题!!!囧。。。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019594 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved