首先讲一个最笨的算法:时间复杂度为N 空间复杂度为N
代码如下:输出结果id=3完全正确;
int[] a = new int[] { 1, 1, 2, 2, 3, 4, 4 }; Dictionary<int, int> dic = new Dictionary<int, int>() { }; for (int i = 0; i < a.Length; i++) { if(dic.Keys.Contains(a[i])) { dic[a[i]]++; } else { dic.Add(a[i], 1); } } int id=dic.FirstOrDefault(s => s.Value == 1).Key;
再来一种时间复杂度为N 空间复杂度为1的。
List<int> arr = new List<int> { 1, 1, 2, 2, 3, 4, 4 }; List<int> arrnew = new List<int>(); for (int i = 0; i < arr.Count; i++) { if(arrnew.Contains(arr[i])) { arrnew.Remove(arr[i]); } else { arrnew.Add(arr[i]); } } id = arrnew[0];
再来个最佳算法:异或来做。(0异或任何数都为本身,相等的数异或为0,异或支持结合律)
int[] arr = new int[] {1,1,2,2,3,4,4 }; var m=0; for(int i=0;i<arr.Length;i++) { m = m ^ arr[i]; }
m=3;
完美解决问题