博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode 136 Single Number解题报告
阅读量:2173 次
发布时间:2019-05-01

本文共 1055 字,大约阅读时间需要 3 分钟。

Single Number

Total Accepted: 62249 Total Submissions: 137347

Given an 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?
这个题是LeetCode上面AC率最高的一道题。题目是给定一个序列,所有的数字都出现两次,只有一个数字出现一次,找出来这个数字。
我一开始使用了map储存数字和出现频率,然后遍历map找到value为1的输出key。

class Solution {public:    int singleNumber(int A[], int n) {        map
mp; for(int i = 0; i < n; ++i) { mp[A[i]]++; } for(map
::iterator it = mp.begin(); it != mp.end(); ++it) { if(it->second == 1) return it->first; } }};

但是这个方法时间复杂度是很高的map的实现是红黑树,插入/查找元素的时间复杂度是O(logN),所以这个算法的时间复杂度应该是O(NLogN)并不是Note里面的O(N),使用的额外空间也非常多。看到Discuss里面其他人的解法基本上都是使用位运算,利用a ^ a == 0这个特性将所有元素全部异或一遍,剩余的结果就是那个出现次数一的元素。

class Solution {public:    int singleNumber(int A[], int n) {        int result = 0;        for(int i = 0; i < n; ++i)            result ^= A[i];        return result;    }};

转载地址:http://fjezb.baihongyu.com/

你可能感兴趣的文章
SQL教程之嵌套SELECT语句
查看>>
日本語の記号の読み方
查看>>
计算机英语编程中一些单词
查看>>
JavaScript 经典例子
查看>>
判断数据的JS代码
查看>>
js按键事件说明
查看>>
AJAX 初次体验!推荐刚学看这个满好的!
查看>>
AJAX 设计制作 在公司弄的 非得要做出这个养的 真晕!
查看>>
Linux 查看文件大小
查看>>
Java并发编程:线程池的使用
查看>>
redis单机及其集群的搭建
查看>>
Java多线程学习
查看>>
检查Linux服务器性能
查看>>
Java 8新的时间日期库
查看>>
Chrome开发者工具
查看>>
【LEETCODE】102-Binary Tree Level Order Traversal
查看>>
【LEETCODE】106-Construct Binary Tree from Inorder and Postorder Traversal
查看>>
【LEETCODE】202-Happy Number
查看>>
和机器学习和计算机视觉相关的数学
查看>>
十个值得一试的开源深度学习框架
查看>>