求一个算法,谢谢

sky254541843 2012-11-22 01:34:49
假设有两个整型集合
A集合 元素
8 20 21 35 49 55
B集合 元素
4 19 23 37 40
每个集合中的元素都是从小到大排列
现在有一个数字,如5-35
要求删除A和B中出现在5-35中间的元素,包括5和35,之后A和B中大于35的每个元素减去31,
我想了个算法,感觉很繁琐,效率太低
...全文
374 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
oNianGao 2012-12-01
  • 打赏
  • 举报
回复
for(Object c:b){ if(Integer.parstInt("o")>=5&&Integer.parstInt("c")>=3) remove o; else{ o=Integer.parstInt("o")-21; print("http://www.fjjianen.com") } }
xiaoyunyun23 2012-11-30
  • 打赏
  • 举报
回复
判断在范围内的话,取出i,直接remove,再遍历打印啊
一起来玩玩呗 2012-11-30
  • 打赏
  • 举报
回复
既然A 和 B 集合中的元素都是排好了序的,那么就可以直接找到5-35之间的数 不需要一个一个遍历
一起来玩玩呗 2012-11-30
  • 打赏
  • 举报
回复
既然A 和 B 集合中的元素都是排好了序的,那么就可以直接找到5-35之间的数
七神之光 2012-11-30
  • 打赏
  • 举报
回复

var list = new List[Int](............)
list.remove(i=>i<35&&i>5)
list.map(i=>i-31)
Mourinho 2012-11-28
  • 打赏
  • 举报
回复
总算看懂题目了。 每个集合遍历一次即可。 以A集合为例: 只保留小于5或者大于35的元素,如果元素大于35则减去31.

List<Integer> result = new List<Integer>();
for (int n : a) {
    if(n < 5) result.add(n);
    else if(n > 35) result.add(n - 31);
}
a = result;
集合B同理
失落夏天 2012-11-24
  • 打赏
  • 举报
回复
你能把原题发上来么? 我感觉你的表述或者你解题的思路上好像有点绕弯路
zhangchao19890805 2012-11-23
  • 打赏
  • 举报
回复
大体上给个思路,


//A集合  8    20     21     35     49      55         
        List<Integer> a=new ArrayList<Integer>();         
        Collections.addAll(a, 8,20,21,35,49,55);        
        //B集合  4    19     23     37     40         
        List<Integer> b=new ArrayList<Integer>();         
        Collections.addAll(b, 19,23,37,40);   
        
        List<Integer> adelete = new ArrayList<Integer> ();
        List<Integer> bdelete = new ArrayList<Integer> ();
        
        //假设数据范围为5-35   
        for (int atmp : a) {
            if (atmp >= 5 && atmp <= 35) {
                adelete.add(atmp);
            }
        }
        for (int btmp : b) {
            if (btmp >= 5 && btmp <= 35) {
                bdelete.add(btmp);
            }
        }
        
        a.removeAll(adelete);
        b.removeAll(bdelete);
        
        //将A B中大于35的元素减去31         
        for(int i=0,j=a.size();i<j;i++){             
            int num=a.get(i);             
            if(num>35){                 
                a.remove(i);                 
                a.add(num-(36-5));                 
                i--;                 
                j--;             
            }         
        }         
        for(int i=0,j=b.size();i<j;i++){             
            int num=b.get(i);             
            if(num>35){                 
                b.remove(i);                 
                b.add(num-(36-5));                 
                i--;                 
                j--;             
            }         
        }         
        //输出A B         
        for(int o : a){             
            System.out.println("a:"+o);         
        }         
        for(int o : b){             
            System.out.println("b:"+o);         
        } 
    

snow-is-my-Love 2012-11-23
  • 打赏
  • 举报
回复
那就不用你那么复杂的算法了,基本我说的那样就行了。
sky254541843 2012-11-22
  • 打赏
  • 举报
回复
引用 7 楼 scottxzj 的回复:
你的意思 是 a 和 b 还要合并是么?
不合并,只是为了说明,去掉A、B集合与5到35之间的数的交集,留下A、B两个集合剩余的数,A、B是两个集合
snow-is-my-Love 2012-11-22
  • 打赏
  • 举报
回复
要是A 和B要合并的话 可以先用set 先合并 再过滤,set自动去重复,减少循环量再for,逻辑不复杂,基本for循环判断就行。判断事不用插入 直接remove 也行
snow-is-my-Love 2012-11-22
  • 打赏
  • 举报
回复
你的意思 是 a 和 b 还要合并是么?
sky254541843 2012-11-22
  • 打赏
  • 举报
回复
引用 5 楼 AA5279AA 的回复:
你是对5到35进行的遍历,这样还得遍历list集合,效率当然不高。算法复杂度是o2 如果你想要的结果是删除list中5到35之间的数,你为什么不对list进行遍历,然后进行选取,这样复杂度是o1。 for(Object o:a){ if(Integer.parstInt("o")>=5&&Integer.parstInt("o")>=5) remo……
可能我没表达清楚,我的操作是想 将A集合并上B集合去与(A、B集合的元素不会有交集)5-35之前所有的数字求交集,然后取得A、B集合交集以外的所有数据
失落夏天 2012-11-22
  • 打赏
  • 举报
回复
你是对5到35进行的遍历,这样还得遍历list集合,效率当然不高。算法复杂度是o2 如果你想要的结果是删除list中5到35之间的数,你为什么不对list进行遍历,然后进行选取,这样复杂度是o1。 for(Object o:a){ if(Integer.parstInt("o")>=5&&Integer.parstInt("o")>=5) remove o; else{ o=Integer.parstInt("o")-31; } } //没有编译环境,有可能代码会有问题。
sky254541843 2012-11-22
  • 打赏
  • 举报
回复
有点没表达清楚 是一串数字,比如5-35 下面是我的算法,感觉循环很多次,不知道有没好的算法

           //A集合  8    20     21     35     49      55
	    List<Integer> a=new ArrayList<Integer>();
	    Collections.addAll(a, 8,20,21,35,49,55);
	   //B集合  4    19     23     37     40
	    List<Integer> b=new ArrayList<Integer>();
	    Collections.addAll(b, 19,23,37,40);
	    //假设数据范围为5-35
	    for(int i=5;i<=35;i++){
	    	boolean isFinish=false;
	    	for(int ai=0,al=a.size();ai<al;ai++){
	    		if(a.get(ai)==i){
	    			a.remove(ai);
	    			ai--;
	    			al--;
	    			isFinish=true;
	    			break;
	    		}
	    	}
	    	if(!isFinish){
	    		for(int bi=0,bl=b.size();bi<bl;bi++){
		    		if(b.get(bi)==i){
		    			b.remove(bi);
		    			bi--;
		    			bl--;
		    			break;
		    		}
		    	}
	    	}
	    }
	    //将A B中大于35的元素减去31
	    for(int i=0,j=a.size();i<j;i++){
	    	int num=a.get(i);
	    	if(num>35){
	    		a.remove(i);
	    		a.add(num-(36-5));
	    		i--;
	    		j--;
	    	}
	    }
	    for(int i=0,j=b.size();i<j;i++){
	    	int num=b.get(i);
	    	if(num>35){
	    		b.remove(i);
	    		b.add(num-(36-5));
	    		i--;
	    		j--;
	    	}
	    }
	    //输出A B
	    for(int o : a){
	    	System.out.println("a:"+o);
	    }
	    for(int o : b){
	    	System.out.println("b:"+o);
	    }
eviljordan 2012-11-22
  • 打赏
  • 举报
回复
楼上正解。。
snow-is-my-Love 2012-11-22
  • 打赏
  • 举报
回复
再穿件一个 数组c 一个for循环 遍历 a 里面一个 if 进行数字加减 和过滤,合格就仍c里面 就完事了。
nyxiaobin123 2012-11-22
  • 打赏
  • 举报
回复
用Iterator迭代器完成啊,一次遍历,最多加几个判断
火爆出炉:微软等数据结构+算法面试100题首次完整亮相 ---100题V0.1版最终完成 作者:July 2010年12月6日 微软等100题系列V0.1版终于结束了。 从2010年10月11日当天最初发表前40题以来,直至此刻,整理这100题,已有近2个月。 2个月,因为要整理这100题,很多很多其它的事都被我强迫性的搁置一旁, 如今,要好好专心去做因这100题而被耽误的、其它的事了。 这微软等数据结构+算法面试100题系列(题目+答案),到底现在、或此刻、或未来, 对初学者有多大的意义,在此,我就不给予评说了。 由他们自己来认定。所谓,公道自在人心,我相信这句话。 任何人,对以下任何资料、题目、或答案,有任何问题,欢迎联系我。 作者邮箱: zhoulei0907@yahoo.cn 作者声明: 转载或引用以下任何资料、或题目,请注明作者本人July及出处。 向您的厚道致敬,谢谢。 好了,请享受这完完整整的100题吧,这可是首次完整亮相哦。:D。 ............ ............ 答案系列: 5.[最新答案V0.3版]微软等数据结构+算法面试100题[第21-40题答案] http://download.csdn.net/source/2832862 6.[答案V0.2版]精选微软数据结构+算法面试100题[前20题]--修正 http://download.csdn.net/source/2813890 //此份答案是针对最初的V0.1版本,进行的校正与修正。 7.[答案V0.1版]精选微软数据结构+算法面试100题[前25题] http://download.csdn.net/source/2796735 剩下的第41-100题答案,正在整理中。预计明年整理公布。 请各位,细心的等待。谢谢。 更多资源,下载地址: http://v_july_v.download.csdn.net/ ================================== 更多详情,请参见本人博客: My Blog: http://blog.csdn.net/v_JULY_v --------------------------------------------------------------------------------------- 各位,若对以上100题任何一道,或对已上传的任何一题的答案, 有任何问题,请把你的思路、想法,回复到此帖子上, 微软等100题系列,永久维护地址(2010年11.26日): http://topic.csdn.net/u/20101126/10/b4f12a00-6280-492f-b785-cb6835a63dc9.html
作者:July、阿财。 时间:二零一一年十月十三日。 ------------------------------ 无私分享造就开源的辉煌。 今是二零一一年十月十三日,明日14日即是本人刚好开博一周年。在一周年之际,特此分享出微软面试 全部100题答案的完整版,以作为对本博客所有读者的回馈。 一年之前的10月14日,一个名叫July 的人在一个叫csdn 的论坛上开帖分享微软等公司数据结构+算法 面试100题,自此,与上千网友一起做,一起思考,一起解答这些面试题目,最终成就了一个名为:结构之法 算法之道的编程面试与算法研究并重的博客,如今,此博客影响力逐步渗透到海外,及至到整个互联网。 在此之前,由于本人笨拙,这微软面试100题的答案只整理到了前60题(第1-60题答案可到本人资源下 载处下载:http://v_july_v.download.csdn.net/),故此,常有朋友留言或来信询问后面40题的答案。只是 因个人认为:一、答案只是作为一个参考,不可太过依赖;二、常常因一些事情耽搁(如在整理最新的今年 九月、十月份的面试题:九月腾讯,创新工场,淘宝等公司最新面试十三题、十月百度,阿里巴巴,迅雷搜狗 最新面试十一题);三、个人正在针对那100题一题一题的写文章,多种思路,不断优化,即成程序员编程 艺术系列。自此,后面40题的答案迟迟未得整理。且个人已经整理的前60题的答案,在我看来,是有诸多问 题与弊端的,甚至很多答案都是错误的。 互联网总是能给人带来惊喜。前几日,一位现居美国加州的名叫阿财的朋友发来一封邮件,并把他自己 做的全部100题的答案一并发予给我,自此,便似遇见了知己。十分感谢。 任何东西只有分享出来才更显其价值。本只需贴出后面40题的答案,因为前60题的答案本人早已整理上 传至网上,但多一种思路多一种参考亦未尝不可。特此,把阿财的答案再稍加整理番,然后把全部100题的答 案现今都贴出来。若有任何问题,欢迎不吝指正。谢谢。 上千上万的人都关注过此100题,且大都都各自贡献了自己的思路,或回复于微软100题维护地址上,或 回复于本博客内,人数众多,无法一一标明,特此向他们诸位表示敬意和感谢。谢谢大家,诸君的努力足以影 响整个互联网,咱们已经迎来一个分享互利的新时代。 感谢诸君,请享用.....
昨日,11.19,最新整理了,第61-80题,现在公布上传。 另加上之前公布的第1-60 题,在此做一次汇总上传,以飨各位。 可以这么说,绝大部分的面试题,都是这100 道题系列的翻版, 此微软等公司数据结构+算法面试100 题系列,是极具代表性的经典面试题。 而,对你更重要的是,我自个还提供了答案下载,提供思路,呵。 所以,这份资料+答案,在网上是独一无二的。 ------------------------------------ 整理资源,下载地址: 答案系列: 1.[最新答案V0.3 版]微软等数据结构+算法面试100 题[第21-40 题答案] http://download.csdn.net/source/2832862 2.[答案V0.2 版]精选微软数据结构+算法面试100 题[前20 题]--修正 http://download.csdn.net/source/2813890 //此份答案是针对最初的V0.1 版本,进行的校正与修正。 3.[答案V0.1 版]精选微软数据结构+算法面试100 题[前25 题] http://download.csdn.net/source/2796735 题目系列: 4.[第一部分]精选微软等公司数据结构+算法经典面试100 题[1-40 题] http://download.csdn.net/source/2778852 5.[第1 题-60 题汇总]微软等数据结构+算法面试100 题 http://download.csdn.net/source/2826690 更多资源,下载地址: http://v_july_v.download.csdn.net/ 若你对以上任何题目或任何答案,有任何问题,欢迎联系我: My E-mail: zhoulei0907@yahoo.cn ------------- 作者声明: 本人July 对以上公布的所有任何题目或资源享有版权。转载以上公布的任何一题, 或上传百度文库资源,请注明出处,及作者我本人。 向你的厚道致敬。谢谢。 ---July、2010 年11 月20 日。 ------------------------------------------------------ 各位,若对以上100题任何一道,或对已上传的任何一题的答案, 有任何问题,请把你的思路、想法,回复到此帖子上, 微软等100题系列,永久维护地址(2010年11.26日): http://topic.csdn.net/u/20101126/10/b4f12a00-6280-492f-b785-cb6835a63dc9.html

62,614

社区成员

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

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