Java&LeetCode 初入门——136. 只出现一次的数字
2019-01-15 13:19
531 查看
Java&LeetCode 初入门——136. 只出现一次的数字
文内代码全部采用JAVA语言。
题目
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
说明:
你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?
测试用例
示例 1:
输入: [2,2,1] 输出: 1
示例 2:
输入: [4,1,2,1,2] 输出: 4
个人解法
写了一个Map,来统计数量。Key对应元素,Value对应个数。问题就是比较慢。在存取数据的过程中很浪费时间。
执行用时: 28 ms, 在Single Number的Java提交中击败了15.93% 的用户
class Solution { public int singleNumber(int[] nums) { Map<Integer, Integer> a=new HashMap<>(); for (int i = 0; i < nums.length; i++) { if (a.containsKey(nums[i])) { a.put(nums[i], 2); }else { a.put(nums[i], 1); } } Set<Integer> set=a.keySet(); Iterator<Integer> it=set.iterator(); int ans=0; while (it.hasNext()) { int b=(Integer)it.next(); int c=(Integer)a.get(b); if (c==1) { ans=b; break; } } return ans; } }
大神解法
方法
求异或
思路
两个相同就删去,不同就存下来。由于只有一个数出现次数为1次,其他数据在异或的过程中都会两两抵消。比如[2,4,6,4,2],求异或时写成二进制[001,010,100,010,001],001与001异或为000,010与010异或为000,最后只剩000与100异或,答案显而易见。
算法
执行用时: 1 ms, 在Single Number的Java提交中击败了99.50% 的用户
代码简单,好理解。
class Solution { public int singleNumber(int[] nums) { int a=0; for (int i = 0; i < nums.length; i++) { a^=nums[i];//异或运算 } return a; } }
相关文章推荐
- 【LeetCode-面试算法经典-Java实现】【136-Single Number(仅仅出现一次的数字)】
- 【LeetCode-面试算法经典-Java实现】【136-Single Number(只出现一次的数字)】
- leetcode解题之136 #Single Number Java版(只出现一次的数字)
- Leetcode 136 Single Number 仅出现一次的数字
- leetcode - 136 - 只出现一次的数字
- Leetcode136. 只出现一次的数字
- LeetCode 136 Single Number(仅仅出现一次的数字)
- LeetCode - 136. 只出现一次的数字
- leetcode之136 只出现一次的数字
- LeetCode 136 Single Number(数组中只出现一次的数字)
- leetcode_137. Single Number II 只出现一次的数字 II 偏离了题目考点,主要是为了写下java
- LeetCode 136 Single Number 出现一次的数字
- leetcode 136. 只出现一次的数字
- leetcode136 只出现一次的数字
- leetcode-探索-初级-数组-只出现一次的数字-java
- 寻找只出现一次的数字(LeetCode: Single Number II)
- [LeetCode136]Single Number寻找一个数组里只出现一次的数
- 《剑指offer》编程题java实现(二十三):数组中唯一只出现一次的数字
- Leetcode 260 Single Number III 仅出现一次的数字
- 数据结构与算法分析笔记与总结(java实现)--数组10:数组中只出现一次的数字