java实现求只出现一次的数字

 更新时间:2023年02月09日 10:23:53   作者:YS855  
本文主要介绍了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求只出现一次数字内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java8时间日期库中的常用使用示例

    Java8时间日期库中的常用使用示例

    这篇文章主要介绍了Java8时间日期库中的20个常用使用示例,帮助大家更好学习Java8是如何处理时间及日期的方法,感兴趣的朋友可以参考一下
    2016-02-02
  • Java SpringBoot项目如何优雅的实现操作日志记录

    Java SpringBoot项目如何优雅的实现操作日志记录

    这篇文章主要介绍了Java SpringBoot项目如何优雅的实现操作日志记录,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的朋友可以参考一下
    2022-08-08
  • java队列之queue用法实例分析

    java队列之queue用法实例分析

    这篇文章主要介绍了java队列之queue用法实例分析,Queue 队列就是一个先入先出(FIFO)的数据结构,Queue接口继承Collection接口。感兴趣的可以了解一下
    2020-07-07
  • Mybatis-plus批量去重插入ON DUPLICATE key update使用方式

    Mybatis-plus批量去重插入ON DUPLICATE key update使用方式

    这篇文章主要介绍了Mybatis-plus批量去重插入ON DUPLICATE key update使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • java数据结构基础:线性表

    java数据结构基础:线性表

    这篇文章主要介绍了Java的数据解构基础,希望对广大的程序爱好者有所帮助,同时祝大家有一个好成绩,需要的朋友可以参考下,希望能给你带来帮助
    2021-07-07
  • 浅析Java迭代器Iterator和Iterable的区别

    浅析Java迭代器Iterator和Iterable的区别

    Java语言中,Iterator和Iterable都是用来遍历集合类数据结构的接口,虽然它们有很多相似的地方,但在具体实现中却有着一些不同之处,本文将详细分析它们的区别,并提供相应的代码示例,需要的朋友可以参考下
    2023-07-07
  • Java利用JavaCPP调用算法示例

    Java利用JavaCPP调用算法示例

    本文主要介绍了Java利用JavaCPP调用算法示例,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-10-10
  • java如何使用redis加锁

    java如何使用redis加锁

    这篇文章主要介绍了java如何使用redis加锁问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-01-01
  • MVC页面之间参数传递实现过程图解

    MVC页面之间参数传递实现过程图解

    这篇文章主要介绍了MVC页面之间参数传递实现过程图解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • Java中spring boot 字符串判断是否为空方法小结

    Java中spring boot 字符串判断是否为空方法小结

    这篇文章主要介绍了Java中spring boot字符串判断是否为空,通过安装依赖,结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2023-11-11

最新评论