1,问题简述
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
说明:
你的算法应该具有线性时间复杂度。你可以不使用额外空间来实现吗?
2,示例
示例 1:
输入: [2,2,1]
输出: 1
示例 2:
输入: [4,1,2,1,2]
输出: 4
3,题解思路
这题这里给出了两种解法,一个是使用键值对集合HashMap集合,一个是使用位运算来解决。
4,题解程序
import java.util.HashMap;
public class SingleNumberTest2 {
public static void main(String[] args) {
int[] nums = {2, 2, 1};
int singleNumber = singleNumber(nums);
System.out.println("singleNumber = " + singleNumber);
}
public static int singleNumber(int[] nums) {
if (nums == null || nums.length == 0) {
return -1;
}
int ans = nums[0];
for (int i = 1; i < nums.length; i++) {
ans = ans ^ nums[i];
}
return ans;
}
public static int singleNumber2(int[] nums) {
if (nums == null || nums.length == 0) {
return -1;
}
HashMap<Integer, Integer> hashMap = new HashMap<>(nums.length);
for (int num : nums
) {
hashMap.put(num, hashMap.getOrDefault(num, 0) + 1);
}
return hashMap.entrySet().stream().filter(x -> x.getValue() == 1).findFirst().get().getKey();
}
}
5,题解程序图片版
6,总结
其实我也不知道,对于看这篇文章的读者来说怎么样,因为如果我输出文章的话一般都是在有大块的时间才来输出的,所以一坐就会很长时间,一般我输出的内容都是自己沉淀好的,因为总觉得如果不经过内心沉淀和自己思考,内容总不是自己的,像极了没有灵魂的身躯而言,给人的感觉,这写的什么玩意,copy有意思吗,不过我写文章或者输出文章的目的第一要点不是为了别人,而是为了自己,因为我觉得我们还不是一个媒介传播者,技术的传播,要是这样我觉得一开始的话,我就会给你找各种各样的技术文章给你了,但是,你发现我文章基本上都是原创,这就是我坚持自己写文章的初衷吧,不过也会看到一些具有思考意义的文章分享给你们的,有需要的话,欢迎在留言区进行讨论,需要的内容,会给到你们的。