136. Single Number
2017-01-31 15:14
253 查看
Single Number
奇淫技巧:
这个思路就是相同元素抑或之后为0,而且疑惑操作满足交换律,最后的就是需要的东西。
对于accumulate的解释可以看:
http://en.cppreference.com/w/cpp/algorithm/accumulate
http://blog.csdn.net/guodongxiaren/article/details/50615067
正规做法:
哈希表。这里使用了额外的空间来做索引。其实可以用map来做,但是这里是为了更加了解哈希表所以这么写了。
136. Single Number
使用排序再比较的方法,就会超时。class Solution { public: int singleNumber(vector<int>& nums) { int nums_len = nums.size(); if(nums_len == 1) return nums[0]; sort(nums.begin(), nums.end()); int i; for(i = 0; i < nums_len; i += 2) { if(i + 1 < nums_len && nums[i] != nums[i + 1]) return nums[i]; } return nums[nums_len - 1]; } };
奇淫技巧:
class Solution { public: int singleNumber(vector<int>& nums) { return std::accumulate(nums.begin(), nums.end(), 0, [](int x, int y) { return x^y; }); } };
这个思路就是相同元素抑或之后为0,而且疑惑操作满足交换律,最后的就是需要的东西。
对于accumulate的解释可以看:
http://en.cppreference.com/w/cpp/algorithm/accumulate
http://blog.csdn.net/guodongxiaren/article/details/50615067
正规做法:
哈希表。这里使用了额外的空间来做索引。其实可以用map来做,但是这里是为了更加了解哈希表所以这么写了。
class Solution { public: int singleNumber(vector<int>& nums) { int result = 0; int nums_len = nums.size(); int *hashkey = new int[nums_len](); int *hashvalue = new int[nums_len](); int *hashkey_m = new int[nums_len](); int *hashvalue_m = new int[nums_len](); int i; int idx = 0; for(i = 0; i < nums_len; i++) { idx = nums[i] % nums_len; if(idx < 0) { idx = ~(idx-1); hashkey_m[idx]++; hashvalue_m[idx] = nums[i]; } else { hashkey[idx]++; hashvalue[idx] = nums[i]; } } for(i=0; i < nums_len; i++) if(hashkey[i] == 1) return hashvalue[i]; for(i=0; i < nums_len; i++) if(hashkey_m[i] == 1) return hashvalue_m[i]; delete []hashkey; delete []hashvalue; delete []hashkey_m; delete []hashvalue_m; return 0 ; } };
相关文章推荐
- 【LeetCode】136. Single Number
- leetcode 136. Single Number 题解
- LeetCode 136. Single Number
- leetcode 136 single number
- 136. Single Number
- leetcode_c++:哈希:Single Number(136)
- Leetcode:136. Single Number
- [LeetCode 136] Single Number
- leetcode 136. Single Number
- LeetCode之136. Single Number
- leetcode-136. Single Number
- LeetCode 136. Single Number
- Leetcode——136. Single Number
- Problem 136. Single Number
- 136. Single Number
- 136. Single Number
- LeetCode - 136 - Single Number
- LeetCode 136. Single Number
- LeetCode 136.Single Number
- LeetCode解题笔记136 Single Number