【136.只出现一次的数字】 LeetCode
2019-03-13 22:34
204 查看
题目描述:
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
说明:
你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?
示例 1:
输入: [2,2,1] 输出: 1
示例 2:
输入: [4,1,2,1,2] 输出: 4
算法一:
思路:
遍历数组,使用 <algorithm> 中的 count() 函数算出每一个元素出现的的次数。
当结果为1时直接返回该元素。
[code]class Solution { public: int singleNumber(vector<int>& nums) { #if 1 for(vector<int>::iterator i = nums.begin(); i!= nums.end();i++){ int temp = count(nums.begin(),nums.end(),*i); if(temp == 1){ return *i; } } #endif return 0; } };
提交结果:
算法二:
思路:
除了一个元素以外,其余元素都会出现两次,所以可以先将数组排序(可使用库函数中的sort()方法)。
结果例如:{1,1,2,3,3}
然后再两两元素比较是否相同,因为在排序的情况下,在比较的两个元素中,如果不相同,
则靠左的元素为只出现一次的元素,故直接返回。
注意:因为数组的长度一定是奇数,故不可能完全两两比较。
如果比较到了最后一个数字,则该元素一定为所求的元素,直接返回。
[code]class Solution { public: int singleNumber(vector<int>& nums) { sort(nums.begin(),nums.end()); for(vector<int>::iterator i = nums.begin();i!=nums.end();i+=2){ if(i+1==nums.end()){ return *i; } else if(*i!=*(i+1)){ return *i; } } return 0; } };
提交结果:
算法3:
思路:
使用异或(^)解决问题。
a^a^b^b^c = c (看别的神仙操作的,服了,这都能想得出来...)
遍历数组,定义一个整型数值 x ,利用 front() 函数得到数组的第一个元素,赋给 x
接着从第二个元素开始一直 异或 到结尾。返回 x
[code]class Solution { public: int singleNumber(vector<int>& nums) { int x = nums.front(); for(vector<int>::iterator i = nums.begin()+1;i!=nums.end();i++){ x=(x^(*i)); } return x; } };
提交结果:
相关文章推荐
- Leetcode刷题24-136.只出现一次的数字(C++)
- LeetCode - 136. 只出现一次的数字
- LeetCode 136 Single Number(仅仅出现一次的数字)
- Leetcode136. 只出现一次的数字
- LeetCode 136.只出现一次的数字(python)
- leetcode解题之136 #Single Number Java版(只出现一次的数字)
- leetcode之136 只出现一次的数字
- 【LeetCode-面试算法经典-Java实现】【136-Single Number(只出现一次的数字)】
- leetcode136 只出现一次的数字
- Java&LeetCode 初入门——136. 只出现一次的数字
- leetcode - 136 - 只出现一次的数字
- LeetCode 136 Single Number 出现一次的数字
- 【LeetCode-面试算法经典-Java实现】【136-Single Number(仅仅出现一次的数字)】
- leetcode 136. 只出现一次的数字
- LeetCode 136 Single Number(数组中只出现一次的数字)
- Leetcode 136 Single Number 仅出现一次的数字
- Leetcode 136 只出现一次的数字
- 【leetcode】数组中找出只出现一次的数字(Single Number)
- 力扣136题(只出现一次的数字)(位运算)
- leetcode 只出现一次的数字