首先来看一下题目: 难度是简单 但是想起来 如果使用线性和不使用 额外的空间 就相对来说 得考虑很多的情况了
先看要求:
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
说明:
你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/single-number
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
public static int singleNumber(int[] nums) {
Arrays.sort(nums);
if (nums.length==1){
return nums[0];
}
for (int i = 0 ; i < nums.length; i++) {
if (i-1>=0&&i+1<nums.length){
if (nums[i-1]!=nums[i]&&nums[i]!=nums[i+1]&&i+1<nums.length){
return nums[i];
}
}else
if (i-1<0&&i+1<nums.length){
if (nums[i]!=nums[i+1]){
return nums[i];
}
}
}
return nums[nums.length-1];
}
```
![在这里插入图片描述](https://img-blog.csdnimg.cn/67f23de4154b4d01a2e6dd036405d361.png)
解题思路:
首先判断
数组的长度是否为1 如果为1 就直接返回
接下来就是判断 当前的i 和 i-1、i+1进行比较 如果两个都不相等 就直接返回当前的 nums[i]
其中 有可能 i-1 <0, i+1<= nums.length 这种情况要另判断
另一种情况 i-1>=0 ,i+1<=nums.length 这种情况要判断
还有一种情况:i-1>=0,i+1>=nums.length 这种情况更要判断