给定一个数组,除了一个数出现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 }
时间效率没测评。时间复杂度没通过网站测评,以后再改吧。