文章目录
关于Leetcode中@只出现一次的数字做题详解TOC
前言
个人的话是一名在校大学生为了提高自己个人能力开始在力扣上学习
提示:以下是本篇文章正文内容,下面案例可供参考
一、题目
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素本题的话引自
作者:力扣 (LeetCode)
链接:https://leetcode-cn.com/leetbook/read/top-interview-questions-easy/x21ib6/
来源:力扣(LeetCode)
二、做题详解
1.
说明:以下代码是本人自己想到的思路,但是有些测试数据不能通过验证,因此尝试了新的解题思路
public static int SingleNUmber1(int nums[]){
int num=nums[0];
for(int num1:nums){
if(num1==num){
continue;
}else{
num=num1;
}
}
return num;
}
2.新的解题思路
思路:HashSet集合来解决,接下来就来实现,接下来的话来谈一下这种解题思路,首先使用HashSet集合创建一个实例,之前也谈到过HashSet中是没有重复元素的,HashSet是基于HashMapl来实现的,允许有空值,是无序的,既不会记录插入的顺序;HashSet 不是线程安全的, 如果多个线程尝试同时修改 HashSet,则最终结果是不确定的。 您必须在多线程访问时显式同步对 HashSet 的并发访问。然后用到for-each遍历一个数组,在循环中进行判断,如果发现遍历的值不能添加到set集合中就将该值移除利用remove方法,最后返回数组的值即可
public static int SingleNumber(int nums[]) {
HashSet<Integer> set = new HashSet<>();
for (int num : nums) {
if (!set.add(num)) {
set.remove(num);
}
}
return (int) set.toArray()[0];
}
总结
以上就是今天要讲的内容,后续还会继续分享新的内容。关于本文的第二种思路但是这题的话还可以用以下思路来做,但是这道题中所考查的是数组和位运算,很显然的是这里用到是异或运算,有了解题思路的话,接下来我们就来具体实现一下吧;在最开始写的时候还是出现了一些问题,这里的话也先来写一下吧 因为没有具体了解异或运算不了解的朋友也可以先停一下如果a^a=0 a^0=a;简单的说就是相异为真,相同为假 下面展示一些 `内联代码片`。public static int SingeN(int nums[]){
int temp=0;
for(int num:nums){
temp=temp^num;
}
return temp;
}