java實(shí)現(xiàn)求只出現(xiàn)一次的數(shù)字
題目:
給你一個(gè) 非空 整數(shù)數(shù)組 nums ,除了某個(gè)元素只出現(xiàn)一次以外,其余每個(gè)元素均出現(xiàn)兩次。找出那個(gè)只出現(xiàn)了一次的元素。
示例1:

示例2:

示例3:

異或運(yùn)算的特點(diǎn):
1.任何數(shù)和0做異或運(yùn)算,結(jié)果還是原來(lái)那個(gè)數(shù)字,即a^0=a
2.任何數(shù)和本身做異或運(yùn)算,結(jié)果為0,即a^a=0
3.異或運(yùn)算滿足交換律和結(jié)合律
思路1:
因?yàn)楸绢}中的元素只有出現(xiàn)一次和兩次的情況,所以我們用異或運(yùn)算,來(lái)判斷數(shù)字是出現(xiàn)一次還是兩次。在singleNumber()方法中,定義一個(gè)int類(lèi)型變量singleNumber=0,然后遍歷數(shù)組,依次和singleNumber進(jìn)行異或運(yùn)算,最后返回singleNumber即可。
如果兩個(gè)數(shù)相同,異或結(jié)果為0;
如果兩個(gè)數(shù)不同,異或結(jié)果為1;
比如
輸入[1,2,2],singleNumber初始化為0
singleNumber為0,和1進(jìn)行異或運(yùn)算結(jié)果為1;
singleNumber為1,和2進(jìn)行異或運(yùn)算結(jié)果為3;
singleNumber為3,和2進(jìn)行異或運(yùn)算結(jié)果為1;
package Lq_算法練習(xí);
import java.util.Scanner;
public class Demo_只出現(xiàn)一次的數(shù)字 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String str = in.nextLine();
String[] strArray = str.split(",");
//鍵盤(pán)輸入數(shù)組,數(shù)字之間用","隔開(kāi)
int[] nums = new int[strArray.length];
for(int i=0;i<nums.length;i++) {
nums[i]=Integer.parseInt(strArray[i]);
//將strArray[i]轉(zhuǎn)換成整型類(lèi)型,并賦值給nums[i]
}
int result = singleNumber(nums);
System.out.println("只出現(xiàn)一次的數(shù)字為:"+result);
}
public static int singleNumber(int[] nums) {
int singleNumber = 0;
//增強(qiáng)型for循環(huán),for(類(lèi)型 變量:數(shù)組),最后輸出的是num
/*
相當(dāng)于
for(int i=0;i<arr.length;i++){
int num = arr[i];
...
}
*/
for (int num : nums) {
singleNumber ^= num;//異或運(yùn)算,轉(zhuǎn)化為二進(jìn)制再進(jìn)行運(yùn)算
System.out.println("num="+num);
System.out.println(singleNumber);
}
return singleNumber;
}
}運(yùn)行結(jié)果:

思路2:
直接在main方法中輸入數(shù)組,再將數(shù)組傳入singleNumber()方法中,得出只出現(xiàn)一次的數(shù)字,最后輸出。
package Lq_算法練習(xí);
import java.util.Scanner;
public class Demo_只出現(xiàn)一次的數(shù)字 {
public static void main(String[] args) {
int[] array = { 1, 2, 2 };
System.out.println("只出現(xiàn)一次的數(shù)字為:"+singleNumber(array));
}
public static int singleNumber(int[] array) {
int tmp = 0; // array[0];
//使用簡(jiǎn)單的for循環(huán)
for (int i = 0; i < array.length; i++) {// for (int i = 1; i < array.length; i++) {//少一次^
tmp = tmp ^ array[i];
}
return tmp;
}
}運(yùn)行結(jié)果:

到此這篇關(guān)于java實(shí)現(xiàn)求只出現(xiàn)一次的數(shù)字的文章就介紹到這了,更多相關(guān)java求只出現(xiàn)一次數(shù)字內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
idea創(chuàng)建SpringBoot自動(dòng)創(chuàng)建Lombok無(wú)效果的問(wèn)題解決方案
這篇文章主要介紹了idea創(chuàng)建SpringBoot自動(dòng)創(chuàng)建Lombok無(wú)效果的問(wèn)題解決方案,感興趣的朋友跟隨小編一起看看吧2024-12-12
Java的動(dòng)態(tài)分派和靜態(tài)分派的實(shí)現(xiàn)
這篇文章主要介紹了Java的動(dòng)態(tài)分派和靜態(tài)分派的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03
Java集合類(lèi)知識(shí)點(diǎn)總結(jié)
本文把Java集合類(lèi)的相關(guān)知識(shí)點(diǎn)做了總結(jié),并把Java常用集合類(lèi)之間的區(qū)別做了分析,一起參考學(xué)習(xí)下。2018-02-02
在 Spring Boot 中使用 @Autowired和 @Bean
本文通過(guò)一個(gè)示例演示了如何在SpringBoot中使用@Autowired和@Bean注解進(jìn)行依賴注入和Bean管理,示例中定義了一個(gè)Student類(lèi),并通過(guò)配置類(lèi)TestConfig初始化Student對(duì)象,在測(cè)試類(lèi)中,通過(guò)@Autowired注解自動(dòng)注入Student對(duì)象并輸出其屬性值,感興趣的朋友跟隨小編一起看看吧2025-02-02

