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

示例2:

示例3:

異或運(yùn)算的特點:
1.任何數(shù)和0做異或運(yùn)算,結(jié)果還是原來那個數(shù)字,即a^0=a
2.任何數(shù)和本身做異或運(yùn)算,結(jié)果為0,即a^a=0
3.異或運(yùn)算滿足交換律和結(jié)合律
思路1:
因為本題中的元素只有出現(xiàn)一次和兩次的情況,所以我們用異或運(yùn)算,來判斷數(shù)字是出現(xiàn)一次還是兩次。在singleNumber()方法中,定義一個int類型變量singleNumber=0,然后遍歷數(shù)組,依次和singleNumber進(jìn)行異或運(yùn)算,最后返回singleNumber即可。
如果兩個數(shù)相同,異或結(jié)果為0;
如果兩個數(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(",");
//鍵盤輸入數(shù)組,數(shù)字之間用","隔開
int[] nums = new int[strArray.length];
for(int i=0;i<nums.length;i++) {
nums[i]=Integer.parseInt(strArray[i]);
//將strArray[i]轉(zhuǎn)換成整型類型,并賦值給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(類型 變量:數(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];
//使用簡單的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實現(xiàn)求只出現(xiàn)一次的數(shù)字的文章就介紹到這了,更多相關(guān)java求只出現(xiàn)一次數(shù)字內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
idea創(chuàng)建SpringBoot自動創(chuàng)建Lombok無效果的問題解決方案
這篇文章主要介紹了idea創(chuàng)建SpringBoot自動創(chuàng)建Lombok無效果的問題解決方案,感興趣的朋友跟隨小編一起看看吧2024-12-12
Java的動態(tài)分派和靜態(tài)分派的實現(xiàn)
這篇文章主要介紹了Java的動態(tài)分派和靜態(tài)分派的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03
在 Spring Boot 中使用 @Autowired和 @Bean
本文通過一個示例演示了如何在SpringBoot中使用@Autowired和@Bean注解進(jìn)行依賴注入和Bean管理,示例中定義了一個Student類,并通過配置類TestConfig初始化Student對象,在測試類中,通過@Autowired注解自動注入Student對象并輸出其屬性值,感興趣的朋友跟隨小編一起看看吧2025-02-02

