A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 韩冬 中级黑马   /  2013-4-27 14:36  /  1563 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

1~100共一百个自然数,已随机放入一个有98个元素的数组a[98]。要求写出一个尽量简单的方案,找出没有被放入数组的那2个数,并在屏幕上打印这2个数。  这个小程序就是一个查找对比的过程吗?希望能得到程序段,或者简单程序思路分析也行的。谢谢

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

11 个回复

倒序浏览
先排序一下数组,然后前后挨着的元素相比较,是否差2或3。差2是缺的2数不连续,差3的是缺的两个数是连续的。当然要注意首尾两元素情况。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
李德全 发表于 2013-4-27 14:55
先排序一下数组,然后前后挨着的元素相比较,是否差2或3。差2是缺的2数不连续,差3的是缺的两个数是连续的 ...

这样应该可以把,那这么说程序的最大工作量在于排序和对比数差而不是查找了。谢谢你
回复 使用道具 举报
我这里省略了 写了10个 少2个
        Integer[] i={4,5,1,2,6,8,9,10};
        Arrays.sort(i);
        List<Integer> list=Arrays.asList(i);
        for (int j =1; j <10; j++) {
                if(!list.contains(j)){
                        System.out.println(j);
                }
        }

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
数组操作麻烦可以转换成集合做
回复 使用道具 举报
韩冬 发表于 2013-4-27 15:05
这样应该可以把,那这么说程序的最大工作量在于排序和对比数差而不是查找了。谢谢你 ...

嘻嘻 不会Java高级方法,只按照我现在的想法说的。如果有更好的方法要贴上来哦。:handshake
回复 使用道具 举报
韩冬 中级黑马 2013-4-27 16:15:07
7#
李德全 发表于 2013-4-27 16:08
嘻嘻 不会Java高级方法,只按照我现在的想法说的。如果有更好的方法要贴上来哦。 ...

我再研究下试试。应该还有步骤少的。
回复 使用道具 举报
韩冬 发表于 2013-4-27 16:15
我再研究下试试。应该还有步骤少的。

想到有一个不需要排序的,新定义一个数组int[] A  遍历98元素的数组B,把B元素值-1作为A数组的下标,并把该下标对应的元素赋值1(随便什么值,不是0就行)。遍历完B后,遍历A,A中元素值为0的下标+1就是所要求的。
回复 使用道具 举报
提供个思路:
1,首先生成100个不相同的随机整放入一个集合。
2,然后把这些集合中的整数放到一个98大的数组中,那么集合中就会剩下2个整数。
3,然后这个数组中的数拿出来和这个集合中的数进行比对,集合中有的数组中没有的就是要找的俩个数!

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
思路:将这个98个元素的数组存入到HashSet集合中;
然后在试着将1-100这100个数放入集合中,看哪俩个可以放进去,就是那两个了

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
{:soso_e113:}
回复 使用道具 举报

如果仍有问题,请继续追问,如果问题已解决,请将分类改为已解决,谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马