摘要:要求我們找到這兩個(gè)數(shù)字。舉例解釋一下第二個(gè)位運(yùn)算一個(gè)數(shù)的負(fù)數(shù)是通過(guò)計(jì)算其正數(shù)的補(bǔ)碼獲得的。比如的八位二進(jìn)制為,那么其反碼為,再在反碼上加一得到其補(bǔ)碼也就是的二進(jìn)制形式。從而獲得二進(jìn)制最右側(cè)的位置。
題目要求
Given an array of numbers nums, in which exactly two elements appear only once and all the other elements appear exactly twice. Find the two elements that appear only once. For example: Given nums = [1, 2, 1, 3, 2, 5], return [3, 5]. Note: The order of the result is not important. So in the above example, [5, 3] is also correct. Your algorithm should run in linear runtime complexity. Could you implement it using only constant space complexity?
假設(shè)一個(gè)整數(shù)數(shù)組中,除了兩個(gè)數(shù)字以外,所有的數(shù)字都出現(xiàn)了兩遍。要求我們找到這兩個(gè)數(shù)字。
可以先參考Single Number I 和 Single Number II。
思路與代碼這里需要了解兩個(gè)位運(yùn)算的重要知識(shí):
a^b^b = a 即b^b=0
a&(-a)能夠獲得a的二進(jìn)制形式的最右側(cè)的1的位置。
舉例解釋一下第二個(gè)位運(yùn)算:
一個(gè)數(shù)的負(fù)數(shù)是通過(guò)計(jì)算其正數(shù)的補(bǔ)碼獲得的。比如5的八位二進(jìn)制為00000101,那么其反碼為11111010,再在反碼上加一得到其補(bǔ)碼11111011也就是-5的二進(jìn)制形式。
那么我們可以知道,一個(gè)數(shù)與其反碼的與運(yùn)算,得出的結(jié)果一定為0。而反碼加一則代表著將原數(shù)的最后一位1在反碼上也置為1。從而獲得二進(jìn)制最右側(cè)1的位置。
public int[] singleNumber(int[] nums) { int diff = 0; for(int num : nums){ diff ^= num; } diff &= -diff; int[] result = {0, 0}; for(int num : nums){ if((num & diff) == 0){ result[0] ^= num; }else{ result[1] ^= num; } } return result; }
想要了解更多開(kāi)發(fā)技術(shù),面試教程以及互聯(lián)網(wǎng)公司內(nèi)推,歡迎關(guān)注我的微信公眾號(hào)!將會(huì)不定期的發(fā)放福利哦~
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/68535.html
摘要:去掉最后一個(gè)保留最后一個(gè)保留最后一個(gè)保留第一個(gè)這道題在論壇里參考了和兩位仁兄的解法。思想是將中所有的數(shù)進(jìn)行異或運(yùn)算。不同的兩個(gè)數(shù)異或的結(jié)果,一定至少有一位為。最后,將和存入數(shù)組,返回。 Problem Given 2*n + 2 numbers, every numbers occurs twice except two, find them. Example Given [1,2,2...
摘要:使用位運(yùn)算數(shù)組只出現(xiàn)一次數(shù)字的數(shù)組得到最低的有效位,即兩個(gè)數(shù)不同的那一位看完上面的解法,我腦海中只有問(wèn)號(hào)的存在,啥意思啊下面就讓我們簡(jiǎn)單了解一下位運(yùn)算并解析一下這三道題目。另,負(fù)數(shù)按補(bǔ)碼形式參加按位與運(yùn)算。你可做過(guò)這幾道題? 在面試的準(zhǔn)備過(guò)程中,刷算法題算是必修課,當(dāng)然我也不例外。某天,我刷到了一道神奇的題目: # 136. 只出現(xiàn)一次的數(shù)字 給定一個(gè)非空整數(shù)數(shù)組,除了某個(gè)元素只出現(xiàn)一次以外...
摘要:簡(jiǎn)單介紹一下位運(yùn)算異或運(yùn)算異或邏輯的關(guān)系是當(dāng)不同時(shí),輸出當(dāng)相同時(shí),輸出。另,負(fù)數(shù)按補(bǔ)碼形式參加按位與運(yùn)算。使一個(gè)數(shù)的最低位為零,可以表示為。,截止到這兒,三道題目中使用的位運(yùn)算介紹完畢,那么這里我們插入一下的詳細(xì)題解。你可做過(guò)這幾道題? 在面試的準(zhǔn)備過(guò)程中,刷算法題算是必修課,當(dāng)然我也不例外。某天,我刷到了一道神奇的題目: # 136. 只出現(xiàn)一次的數(shù)字 給定一個(gè)非空整數(shù)數(shù)組,除了某個(gè)元素只...
摘要:月下半旬攻略道題,目前已攻略題。目前簡(jiǎn)單難度攻略已經(jīng)到題,所以后面會(huì)調(diào)整自己,在刷算法與數(shù)據(jù)結(jié)構(gòu)的同時(shí),攻略中等難度的題目。 Create by jsliang on 2019-07-30 16:15:37 Recently revised in 2019-07-30 17:04:20 7 月下半旬攻略 45 道題,目前已攻略 100 題。 一 目錄 不折騰的前端,和咸魚(yú)有什么區(qū)別...
Problem Given a string, you need to reverse the order of characters in each word within a sentence while still preserving whitespace and initial word order. Example 1:Input: Lets take LeetCode contest...
閱讀 1384·2021-11-15 18:11
閱讀 2512·2021-08-19 10:56
閱讀 680·2021-08-09 13:42
閱讀 795·2019-08-30 15:53
閱讀 2088·2019-08-30 10:55
閱讀 3144·2019-08-29 17:18
閱讀 1436·2019-08-29 13:45
閱讀 546·2019-08-29 13:15