博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Single Number
阅读量:4099 次
发布时间:2019-05-25

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

题目地址:

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?

题目比较简单,就是一个数组中其他元素都出现过两次,只有一个元素就出现了一次,找出这个元素。

我的思路也很简单,想到了用Java的HashSet,没有的话就填进去,有的话就移出来,反正题目说了,肯定会有一个元素是单个的,所以最后HashSet中肯定会有一个“光棍”剩下来。

下面是Java代码的实现:

public int singleNumber(int[] nums) {    HashSet
set = new HashSet
(); for (int i = 0; i < nums.length; i++) { if (!set.contains(nums[i])) set.add(nums[i]); else set.remove(nums[i]); } int reslut = 0; for (Integer t: set) { reslut = t; } return reslut;}

注意哦,人家题目特意还说了,算法的时间复杂度应该是线性的,而且不要用多余的空间,那意思就是让我们过一遍数据就要得出答案。

在上面的代码中,我们确实也只是过了一遍数据,但是在使用contain和remove方法的时候也花费了时间,所以上面的算法应该比O(n)要大。

因为只有一个是单身,剩下的全是对子,那么我们可以想如果成对的直接抵消不就行了吗,怎么抵消,加减抵消不合适,那么就用位抵消,好,想到这里,按位异或就能上位了。

public int singleNumber(int[] nums) {    int reslut = 0;    for (int t: nums) {        reslut = t ^ reslut;    }    return reslut;}

这段代码比上一个代码简洁了不少,也快了不少。

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

你可能感兴趣的文章
【Python爬虫】微信公众号历史文章和文章评论API分析
查看>>
【Python】Python简介和Python解释器
查看>>
多任务场景下单线程异步多线程多进程
查看>>
【Python】单线程异步多线程多进程实例
查看>>
【Python爬虫】requests与urllib库的区别
查看>>
【教育】世界上最伟大的25个教育法则
查看>>
【测试工具】在linux测试环境安装bug管理工具禅道
查看>>
【测试工具】在linux测试环境访问禅道数据库
查看>>
【Python】提升Python程序性能的好习惯2
查看>>
【工具】SecureCRT安装和注册
查看>>
【工具】FTP软件FileZilla下载和连接服务器
查看>>
【Python】random模块生成多种类型随机数
查看>>
【债券】可转换债券基本概念
查看>>
【股票】融资融券基本概念
查看>>
【性能测试】性能测试的基础理论
查看>>
【性能测试】性能测试的基本流程
查看>>
【性能测试】性能测试工具选择
查看>>
【性能测试】Linux系统监控-Top命令
查看>>
【测试工具】禅道项目管理工具设置触发邮箱
查看>>
【性能测试】Linux系统监控-CPU信息
查看>>