今天开始刷leetcode上的题,争取校招前刷过一遍,从AC率最高的题目开始刷,不废话了,看题

题目:Single Number

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?

个人思路:

1、对数组排序(从小到大或者从大到小)

2、从第一个数开始,与它后面一个数比较,若相同,说明数组中有两个这样的数,若不同,说明数组中只有一个这样的数,也即是我们要获得的数

代码(main里面的代码用于测试,提交时只需提交必要代码即可):

 1 #include <algorithm>
 2 #include <iostream>
 3
 4 using namespace std;
 5
 6 class Solution
 7 {
 8 public:
 9     int singleNumber(int A[], int n)
10     {
11         int index;
12         sort(&A[0], &A[n]);
13         for (index = 0; index < n; index += 2)
14         {
15             if (A[index] != A[index + 1])
16             {
17                 break;
18             }
19         }
20
21         return A[index];
22     };
23 };
24
25 int main()
26 {
27     int A[] = {1, 2, 1, 3, 3, 4, 2, 5, 4};
28     Solution s;
29     int single = s.singleNumber(A, 9);
30     cout << single << endl;
31
32     system("pause");
33     return 0;
34 }

上面的代码先排序,然后遍历数组,由于不是很清楚sort函数的时间复杂度,姑且当作O(nlogn)吧,总的来说,成功AC了,但整个代码的时间复杂度为O(nlogn)

且题目的要求为:Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory?

上网查找了线性时间复杂度算法,并且实践了一下,在这里与大家分享,原文链接:http://www.cnblogs.com/changchengxiao/p/3413294.html

思路:

1、对于异或运算,有a ^ b = b ^ a和0^ a = a

2、那么遍历数组时,将数组所有元素进行异或处理,相同的元素异或结果为0,则最终的异或结果即为只出现一次的元素

代码:

 1 #include <algorithm>
 2 #include <iostream>
 3
 4 using namespace std;
 5
 6 class Solution
 7 {
 8 public:
 9     int singleNumber(int A[], int n)
10     {
11         //个人思路
12         /*
13         int index;
14         sort(&A[0], &A[n]);
15         for (index = 0; index < n; index += 2)
16         {
17             if (A[index] != A[index + 1])
18             {
19                 break;
20             }
21         }
22
23         return A[index];
24         */
25
26         //网上思路
27         int result = 0;
28         for (int i = 0; i < n; ++i)
29         {
30             result ^= A[i];
31         }
32
33         return result;
34     };
35 };
36
37 int main()
38 {
39     int A[] = {1, 2, 1, 3, 3, 4, 2, 5, 4};
40     Solution s;
41     int single = s.singleNumber(A, 9);
42     cout << single << endl;
43
44     system("pause");
45     return 0;
46 }

原文链接中还有两个扩展题,可以看看,好了,就到这吧

转载于:https://www.cnblogs.com/laihaiteng/p/3776910.html

leetcode - Single Number相关推荐

  1. [LeetCode]Single Number II

    今天室友推荐了一道LeetCode上面的练习题Single Number II,题目大概的意思是有一个整形的数组,里面只有一个数是出现一次的,其他的数都出现了三次,然后让把这个数找出来. 第一眼看到这 ...

  2. LeetCode Single Number I / II / III

    [1]LeetCode 136 Single Number 题意:奇数个数,其中除了一个数只出现一次外,其他数都是成对出现,比如1,2,2,3,3...,求出该单个数. 解法:容易想到异或的性质,两个 ...

  3. leetcode Single Number python

    Single Number Given an array of integers, every element appears twice except for one. Find that sing ...

  4. LeetCode Single Number III(位操作)

    问题:给出一个数组,有两个数只出现一次,其它都出现两次. 思路:先对数组求异或,得到两个数异域的结果.然后确定差异的最低位.再将数组与这个差异位作异域,得到其中的一个数.再与异域结果异域后即得到另外一 ...

  5. LeetCode Single Number II(位操作)

    问题:给出一个数组,其中只有一个数出现一次,其它数出现三次,找出出现一次的数 思路: 1.统计每位出现的次数,如果mod 3等于1,则将该位置为1,最后即得到出现一次的数. 2.使用三个变量来分别来表 ...

  6. [Leetcode] single number ii 找单个数

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

  7. [LeetCode] Single Number 单独的数字

    Given an array of integers, every element appears twice except for one. Find that single one. Note: ...

  8. [Leetcode] single number 找单个数

    Given an array of integers, every element appears twice except for one. Find that single one. Note:  ...

  9. LeetCode Single Number

    Given an array of integers, every element appears twice except for one. Find that single one. Note: ...

最新文章

  1. shell 流程控制语句
  2. 网络:HTTP1.1和HTTP2区别
  3. 决策树 算法原理及代码
  4. sparkstreaming监听hdfs目录如何终止_HDFS—HA高可用详解
  5. SDWebImage之工具类
  6. Android-JNI开发系列《一》-动态库的函数注册
  7. NYOJ--60谁获得了最高奖学金
  8. 1解锁方式9008_黔隆科技刷机教程红米4A忘记密码刷机解锁降级救砖解屏幕锁账户锁教程...
  9. Android之monkey Test
  10. edgewin10无法安装_win10内置Edge浏览器遇到“您未安装FLASH控件”如何解决
  11. CoreText(五):省略号
  12. 马士兵_JAVA自学之路
  13. Win 11 预览版虚拟机安装
  14. JSP页面之间数据传递,JSP页面跳转
  15. 货币金融学-期末复习
  16. 程序员升职记-五种种说话套路
  17. parrot无人机蓝牙协议
  18. SE-Net:Squeeze-and-Excitation blocks
  19. 用C语言给孩子水果英语早教,宅家陪娃资源:100种水果的英文读法+6种室内可以玩的球类游戏,和娃嗨起来!...
  20. Win32编程问题一,“WinMain”: 无法重载函数

热门文章

  1. 《最后生还者:第二部》文学批评
  2. 【LINUX】Oracle数据库 linux磁盘头数据损坏修复
  3. yuzu模拟器linux,Yuzu Early Acces
  4. Ubuntu 16.04安装Tomcat 8 图解
  5. oracle dump 转储
  6. 【Task】- JVM逃逸分析等待学习任务
  7. laravel基础课程---11、lavarel的ajax操作(ajax优劣势是什么)
  8. linux学习笔记-10.解压与压缩
  9. X509证书认证流程介绍
  10. 前后端分离+本地服务实时刷新+缓存管理+接口proxy+静态资源增量更新+各种性能优化+上线运维发布——gulp工作流搭建...