一.题目介绍
1.题目来源
链接:LeetCode
2.题目
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
说明:
你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?
示例1:
输入: [2,2,1] 输出: 1
示例2:
输入: [4,1,2,1,2] 输出: 4
二.具体实现
1.实现思路
题目要求找到出现一次的元素,为了节约时间,我们可以先将其排序,然后用模比较,如果当前位只出现一次并且它的下一位元素与其不相同则返回其前面一个元素,否则返回最后一个元素。
2.实现代码
1)自己的实现方式
public int singleNumber(int[] nums) { //先进行排序 Arrays.sort(nums); //进行比较 for(int x = 0 ; x < nums.length ;x++){ if(x%2 == 1 && nums[x] != nums[x-1]){ return nums[x-1]; } } //返回 return nums[nums.length-1]; } 复制代码
2)题友的实现方式
最巧妙的思路和方法,使用异或来解决,什么是异或?即两者之间相同为0,不同为1,以数组的第一位为头,然后循环数组,如果数组中元素与其相同则返回0,反之返回1,而其1对应的则是满足题目条件的元素。
3.运行结果
三.题后思考
这是一道特别好的题目,虽然题目难度是简单,其实我们往往都会把简单问题复杂化,所以会导致问题越解越难,这就是要看看我们的大脑够不够灵光了。