- 论坛徽章:
- 1
|
本帖最后由 hq8318 于 2011-08-16 01:28 编辑
CSDN更多人讨论,原来这题是指“题目 意思:我这里每个数字都是一个阿拉伯数字 是1位的 是 1到9之间的 但是有1百万个这样的数字 比如 12345678912 是11个这样的数字”。
我思路大概是:当数字出现3次直接忽略,8个数字出现3次时结束。
用图m 保存数字出现的次数,出现3次的保存到一集合hs,并从m 中移出。集合hs有的数字,不用比较了,直接跳到下一个,当集合hs有8个数字时,输出结果。最后是当hs达不到8个数字时,找到只出现两次的数字,输出,由于集合无indexOf,只有用一循环。
- import java.util.*;
- public class million
- {
- public static void main(String args[])
- {
- int[] n={1,2,3,3,4,5,6,7,8,9,3,1,5,6,5,6,3,7,8,9,7,8,9,2,2,4,4};
- // int[] n={1,2,3,4,5,6,7,8,9,1,2,3,4,5,6,7,8,9,1,2,3,1,5,6,7,8,9};
- // int[] n={1,2,3,4,5,6,7,8,9,1,2,2,2};
- Map<Integer,Integer> m=new HashMap<Integer,Integer>();
- Set<Integer> hs=new HashSet<Integer>();
- Integer v;
- for(int n1:n){
- if(hs.contains(n1)) continue;
- v=m.get(n1);
- if(v==null)
- m.put(n1,1);
- else if(v==1)
- m.put(n1,v+1);
- else if(v==2){
- hs.add(n1);
- m.remove(n1);
- if(hs.size()==8){
- for(int i=1;i<10;i++){
- if(!hs.contains(i)) System.out.println(i);
- }
- break;
- }
- }
- }
- if(hs.size()<8){
- for(Integer k:m.keySet()){
- if(m.get(k)==2)
- System.out.println(k);
- }
- }
- System.out.println(m);
- System.out.print(hs);
- }
- }
复制代码 |
|