Leetcode刷题24-136.只出现一次的数字(C++)
2019-03-15 20:12
204 查看
题目来源:链接: [https://leetcode-cn.com/problems/single-number/].
136.只出现一次的数字
1.问题描述
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
说明:
你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?
示例1:
输入: [2,2,1] 输出: 1
注意:
输入: [4,1,2,1,2] 输出: 4
2.我的解决方案
我的思路比较暴力,也比较蠢,哈哈哈。
先由小到大排序sort,然后找出 与 前后的元素 都不一样的 元素。
注意len = 1 的情况。
注意首尾的情况。
代码如下:
class Solution { public: int singleNumber(vector<int>& nums) { sort(nums.begin(), nums.end()); int len = nums.size(); int i = 0; if(len == 1) //处理异常1:nums中元素只有一个的情况 { return nums[0]; } if(nums[0] != nums[1]) //处理异常2:处理排序后 第一个元素就是不重复的情况 { return nums[0]; } if(nums[len-1] != nums[len-2]) //处理异常3:处理排序后 最后一个元素就是不重复的情况 { return nums[len-1]; } for(i = 1; i < len - 2; ++i) // 查找 不重复的 { if( (nums[i] != nums[i-1]) && (nums[i] != nums[i+1]) ) { break; } } return nums[i]; } }; //加速的 装X专用啊哈 static auto _____ = []() { std::ios::sync_with_stdio(false); cin.tie(NULL); return 0; }();
3.大神们的解决方案
看看人家的代码,厉不厉害?羡不羡慕?知道自己和人家的差距了吧?勉励自己继续加油!!!
class Solution { public: int singleNumber(vector<int>& nums) { int res = 0; for (auto num : nums) { res ^= num; } return res; } };
大神为会这么写呢???
请继续往下看。。。就会懂的。哈哈
4.我的收获
大神的代码主要是用的位操作,简洁明了!
又学到了新的 知识,开心!
1. 交换律:a ^ b ^ c <=> a ^ c ^ b 2. 任何数与0异或 :0 ^ n => n 3. 相同的数异或为 0: n ^ n => 0 举例: a = [2,3,2,4,4] 2 ^ 3 ^ 2 ^ 4 ^ 4等价于 2 ^ 2 ^ 4 ^ 4 ^ 3 => 0 ^ 0 ^3 => 3
2019/3/15 胡云层 于南京 24
相关文章推荐
- 136.只出现一次的数字(C++)
- 【LeetCode-面试算法经典-Java实现】【136-Single Number(只出现一次的数字)】
- LeetCode 136 Single Number(数组中只出现一次的数字)
- LeetCode 136 Single Number 出现一次的数字
- Leetcode136. 只出现一次的数字
- leetcode之136 只出现一次的数字
- LeetCode - 136. 只出现一次的数字
- leetcode136 只出现一次的数字
- leetcode - 136 - 只出现一次的数字
- Leetcode 136 Single Number 仅出现一次的数字
- leetcode 136. 只出现一次的数字
- Java&LeetCode 初入门——136. 只出现一次的数字
- 【LeetCode-面试算法经典-Java实现】【136-Single Number(仅仅出现一次的数字)】
- LeetCode 136 Single Number(仅仅出现一次的数字)
- leetcode解题之136 #Single Number Java版(只出现一次的数字)
- LeetCode(初级算法)数组篇--只出现一次的数字c++
- 数组中只出现一次的数字 C++
- leetcode_137. Single Number II 只出现一次的数字 II 偏离了题目考点,主要是为了写下java
- Leetcode 只出现一次的数字
- LeetCode 136 只出现1次的数字