计蒜客 单独的数字

给定一个数组,除了一个数出现1次之外,其余数都出现3次。找出出现一次的数。

如:{1, 2, 1, 2, 1, 2, 7}, 找出7.

格式:

   第一行输入一个数n,代表数组的长度,接下来一行输入数组A[n],(输入的数组必须满足问题描述的要求),最后输出只出现一次的数。

要求:

   你的算法只能是线性时间的复杂度,并且不能使用额外的空间哦~

样例输入

4
0 0 0 5

样例输出

5

=====================================
第一次code:

 1 import java.util.ArrayList;
 2 import java.util.HashMap;
 3 import java.util.Iterator;
 4 import java.util.List;
 5 import java.util.Map;
 6 import java.util.Map.Entry;
 7 import java.util.Scanner;
 8 
 9 public class Main 
10 { 
11     public static void main(String[] args) 
12     { 
13         Scanner input = new Scanner(System.in);
14         run(input.nextInt());
15     }
16     public static void run(int n)
17     {
18         Scanner input = new Scanner(System.in);
19         List<String>list = new ArrayList<String>();
20         for(int i=0;i<n;i++)
21         {
22             list.add(input.next());
23         }
24         Map<String,Integer> map = new HashMap<String, Integer>();  
25         for(int i =0 ;i<list.size();i++)
26         {  
27             if(null!= map.get(list.get(i)))
28             {  
29                 map.put(list.get(i), map.get(list.get(i-1))+1); //value+1  
30             }
31             else
32             {  
33                 map.put(list.get(i),1);  
34             }  
35         }  
36           
37         Iterator it = map.entrySet().iterator();    
38         while(it.hasNext())
39         {  
40             Entry entry = (Entry) it.next();     
41             String  key  =  entry.getKey().toString();        
42             int  value  =  Integer.parseInt(entry.getValue().toString());  
43             if(value==1)
44             {
45                 System.out.println(key); 
46             }
47         }   
48     }
49 }


时间效率没测评。时间复杂度没通过网站测评,以后再改吧。

原文地址:https://www.cnblogs.com/niithub/p/5841517.html