java实现求只出现一次的数字
题目:
给你一个 非空 整数数组 nums ,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
示例1:
示例2:
示例3:
异或运算的特点:
1.任何数和0做异或运算,结果还是原来那个数字,即a^0=a
2.任何数和本身做异或运算,结果为0,即a^a=0
3.异或运算满足交换律和结合律
思路1:
因为本题中的元素只有出现一次和两次的情况,所以我们用异或运算,来判断数字是出现一次还是两次。在singleNumber()方法中,定义一个int类型变量singleNumber=0,然后遍历数组,依次和singleNumber进行异或运算,最后返回singleNumber即可。
如果两个数相同,异或结果为0;
如果两个数不同,异或结果为1;
比如
输入[1,2,2],singleNumber初始化为0
singleNumber为0,和1进行异或运算结果为1;
singleNumber为1,和2进行异或运算结果为3;
singleNumber为3,和2进行异或运算结果为1;
package Lq_算法练习; import java.util.Scanner; public class Demo_只出现一次的数字 { public static void main(String[] args) { Scanner in = new Scanner(System.in); String str = in.nextLine(); String[] strArray = str.split(","); //键盘输入数组,数字之间用","隔开 int[] nums = new int[strArray.length]; for(int i=0;i<nums.length;i++) { nums[i]=Integer.parseInt(strArray[i]); //将strArray[i]转换成整型类型,并赋值给nums[i] } int result = singleNumber(nums); System.out.println("只出现一次的数字为:"+result); } public static int singleNumber(int[] nums) { int singleNumber = 0; //增强型for循环,for(类型 变量:数组),最后输出的是num /* 相当于 for(int i=0;i<arr.length;i++){ int num = arr[i]; ... } */ for (int num : nums) { singleNumber ^= num;//异或运算,转化为二进制再进行运算 System.out.println("num="+num); System.out.println(singleNumber); } return singleNumber; } }
运行结果:
思路2:
直接在main方法中输入数组,再将数组传入singleNumber()方法中,得出只出现一次的数字,最后输出。
package Lq_算法练习; import java.util.Scanner; public class Demo_只出现一次的数字 { public static void main(String[] args) { int[] array = { 1, 2, 2 }; System.out.println("只出现一次的数字为:"+singleNumber(array)); } public static int singleNumber(int[] array) { int tmp = 0; // array[0]; //使用简单的for循环 for (int i = 0; i < array.length; i++) {// for (int i = 1; i < array.length; i++) {//少一次^ tmp = tmp ^ array[i]; } return tmp; } }
运行结果:
到此这篇关于java实现求只出现一次的数字的文章就介绍到这了,更多相关java求只出现一次数字内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
Java SpringBoot项目如何优雅的实现操作日志记录
这篇文章主要介绍了Java SpringBoot项目如何优雅的实现操作日志记录,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的朋友可以参考一下2022-08-08Mybatis-plus批量去重插入ON DUPLICATE key update使用方式
这篇文章主要介绍了Mybatis-plus批量去重插入ON DUPLICATE key update使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教2023-12-12Java中spring boot 字符串判断是否为空方法小结
这篇文章主要介绍了Java中spring boot字符串判断是否为空,通过安装依赖,结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧2023-11-11
最新评论