码迷,mamicode.com
首页 > 其他好文 > 详细

Single Number II

时间:2015-07-30 01:57:07      阅读:115      评论:0      收藏:0      [点我收藏+]

标签:

题目:

Given an array of integers, every element appears three times except for one. Find that single one.

 

解法一:O(n*n)时间复杂度。编译一下,果然没通过。程序如下:不过我觉得本算法最简单,而且通用性是最好的。

1 int singleNumber(int A[], int n) {
2         for(int i = 0; i < n; i++)
3         {
4             if(count(A, A + n, A[i])<2)
5                 return i;
6         }
7     }

 

1. 要求复杂度为O(n),白话点说也就是不能在一个n次循环里面添加任何循环,前面之所以失败就是因为这个原因。但是可以在循环外添加循环!!!

2. 既然可以在查找循环外添加循环,那么添加什么循环好呢?排序吧,没错!排序的数列干什么都方便!(感觉这个结论也适用很多地方)

排序之后就可以很方便地计算一个数在数列中出现了多少次了。一连出现多少次就是总共出现多少次了,方便吧。O(∩_∩)O~

然后开始写代码了,wait!我觉得动手之前还是先考虑一下特殊情况吧。特殊情况一般是边界问题:

1. 如果数列外空呢?

2 如果第一个是single number呢?

3 如果最后一个是single number呢?

好了,分析完就可以写代码了!下面代码适合两个问题,只需要把出现次数修改为对应的2或3次数就可以了。而且不需要额外的空间!

 

 

 

reference:http://blog.csdn.net/kenden23/article/details/13625297

 

Single Number II

标签:

原文地址:http://www.cnblogs.com/hygeia/p/4687975.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!