[leetcode]136. Single Number
Given a non-empty array of integers, every element appears twice except for one. Find that single one.
Note:
Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory?
Example 1:
Input: [2,2,1] Output: 1
Example 2:
Input: [4,1,2,1,2] Output: 4
1.普通解法(利用额外hash)
//hash解法 class Solution { public int singleNumber(int[] nums) { Map<Integer, Integer> hash = new HashMap<>(); for (int i = 0; i < nums.length; i++) { if(hash.get(nums[i]) == null) { hash.put(new Integer(nums[i]), new Integer(0)); } else { hash.put(new Integer(nums[i]), new Integer(1)); } } for (int i = 0; i < nums.length; i++) { if(hash.get(nums[i]) == 0) return nums[i]; } return -1; } }
2.位运算 (按位异或),利用位运算特性
class Solution { public int singleNumber(int[] nums) { int result = 0; for (int i = 0; i < nums.length; i++) { result ^= nums[i]; } return result; } }
posted on 2018-09-03 10:38 AviatorJeremy 阅读(121) 评论(0) 编辑 收藏 举报