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é)果還是原來那個(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)算,來判斷數(shù)字是出現(xiàn)一次還是兩次。在singleNumber()方法中,定義一個(gè)int類型變量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(","); //鍵盤輸入數(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]; //使用簡(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)文章
Java?SpringBoot項(xiàng)目如何優(yōu)雅的實(shí)現(xiàn)操作日志記錄
這篇文章主要介紹了Java?SpringBoot項(xiàng)目如何優(yōu)雅的實(shí)現(xiàn)操作日志記錄,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參考一下2022-08-08Mybatis-plus批量去重插入ON DUPLICATE key update使用方式
這篇文章主要介紹了Mybatis-plus批量去重插入ON DUPLICATE key update使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-12-12java數(shù)據(jù)結(jié)構(gòu)基礎(chǔ):線性表
這篇文章主要介紹了Java的數(shù)據(jù)解構(gòu)基礎(chǔ),希望對(duì)廣大的程序愛好者有所幫助,同時(shí)祝大家有一個(gè)好成績(jī),需要的朋友可以參考下,希望能給你帶來幫助2021-07-07淺析Java迭代器Iterator和Iterable的區(qū)別
Java語(yǔ)言中,Iterator和Iterable都是用來遍歷集合類數(shù)據(jù)結(jié)構(gòu)的接口,雖然它們有很多相似的地方,但在具體實(shí)現(xiàn)中卻有著一些不同之處,本文將詳細(xì)分析它們的區(qū)別,并提供相應(yīng)的代碼示例,需要的朋友可以參考下2023-07-07MVC頁(yè)面之間參數(shù)傳遞實(shí)現(xiàn)過程圖解
這篇文章主要介紹了MVC頁(yè)面之間參數(shù)傳遞實(shí)現(xiàn)過程圖解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11Java中spring boot 字符串判斷是否為空方法小結(jié)
這篇文章主要介紹了Java中spring boot字符串判斷是否為空,通過安裝依賴,結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2023-11-11