我是纯暴力的,分两种情况,一个是aab,一个是abb;最后卡一下数组的末尾三个数的值。代码:
class Solution { public int singleNumber(int[] nums) { Arrays.sort(nums); int l = nums.length; int t = 0; int count = 0X7fffffff; int i = 1; while (i < l-1) { if (nums[t] != nums[i]){ if (nums[i] == nums[i+1]) count = nums[t]; break; } if (nums[t] == nums[i]) { t = i + 1; i = i + 2; } } if (count==0X7fffffff){ count = nums[l-1]; } return count; } }
也可以用HashSet的方法:不用排序了,直接往里加,重复会返回false,然后停止添加并删除掉原先加过的值, 最后剩下的那个值就是要求的结果。时间比暴力的要长。
class Solution { public int singleNumber(int[] nums) { HashSet<Integer> s = new HashSet<Integer> (); for (int i = 0; i < nums.length; i++){ if (!s.add(nums[i])) { s.remove(nums[i]); } } return (int)s.toArray()[0]; } }
评论里有大佬用到了位运算,是真的强!这里摘抄一下:
public int singleNumber(int nums[]) { int result = 0; for (int i = 0; i < nums.length; i++) result ^= nums[i]; return result; } 作者:数据结构和算法 链接:https://leetcode-cn.com/leetbook/read/top-interview-questions-easy/x21ib6/?discussion=LIRNfM 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。