摘要:描述給定一個(gè)整數(shù)數(shù)組,除了某個(gè)元素外其余元素均出現(xiàn)兩次。請(qǐng)找出這個(gè)只出現(xiàn)一次的元素。備注你的算法應(yīng)該是一個(gè)線性時(shí)間復(fù)雜度。
描述:
給定一個(gè)整數(shù)數(shù)組,除了某個(gè)元素外其余元素均出現(xiàn)兩次。請(qǐng)找出這個(gè)只出現(xiàn)一次的元素。
備注:
你的算法應(yīng)該是一個(gè)線性時(shí)間復(fù)雜度。 你可以不用額外空間來實(shí)現(xiàn)它嗎?
實(shí)現(xiàn):#我的實(shí)現(xiàn)方法:利用count找出元素的個(gè)數(shù),如果個(gè)數(shù)為1的就是要找的 class Solution(object): def singleNumber(self, nums): """ :type nums: List[int] :rtype: int """ for i in nums: n = nums.count(i) if n ==1: return i 但是這個(gè)方法的時(shí)間超時(shí)了,達(dá)不到題目的性能要求
可以利用Counter,可以將list轉(zhuǎn)化成,list里面的value對(duì)應(yīng)個(gè)數(shù)的字典
例如:numss = [2,2,1,1,1,3]
{1: 3, 2: 2, 3: 1}
from collections import Counter class Solution(object): def singleNumber(self, nums): """ :type nums: List[int] :rtype: int """ dict_nums = dict(Counter(nums)) nums_list = dict_nums.keys() for i in nums_list: if dict_nums[i]==1: return i
樓下回復(fù)大神提示說可以先對(duì)list進(jìn)行排序:想到一種方法:排序之后進(jìn)行比較:
class Solution(object): def singleNumber(self, nums): """ :type nums: List[int] :rtype: int """ nums.sort() if len(nums)==1: return nums[0] else: if nums[0] != nums[1]: return nums[0] elif nums[len(nums) - 1] != nums[len(nums) - 2]: return nums[len(nums) - 1] else: for n in range(len(nums)): if nums[n + 2] != nums[n + 1] and nums[n+2] != nums[n+3]: return nums[n + 2]
根據(jù)大牛提示的每個(gè)元素異或的方式:
由于A XOR A = 0 且 ((A^A) ^ (B^B) ^ (C^C) ^ (D^D) ^ E) = ((0^ 0 ^ 0 ^ 0 ^ E) =E
直接把整個(gè)數(shù)組異或運(yùn)算,最后的出來的就是只出現(xiàn)一次的數(shù)字了。
class Solution(object): def singleNumber(self, nums): """ :type nums: List[int] :rtype: int """ ss = 0 for i in nums: ss = ss^i return ss
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/41481.html
摘要:解決方案異或操作異或運(yùn)算是對(duì)于二進(jìn)制數(shù)字而言的,比如說一個(gè)有兩個(gè)二進(jìn)制,如果兩個(gè)值不相同,則異或結(jié)果為。比如說,本質(zhì)上其實(shí)是和的每一對(duì)比特位執(zhí)行異或操作,等價(jià)于下面數(shù)字對(duì)應(yīng)的二進(jìn)制數(shù)字對(duì)應(yīng)的二進(jìn)制數(shù)字對(duì)應(yīng)的二進(jìn)制因此的結(jié)果就為啦。 新年第一篇文章,先祝大家新年快樂!!那么接下來進(jìn)入正文。 前言 前陣子突發(fā)奇想,突然開始刷leetcode。其中刷到了一道有意思的題目,發(fā)現(xiàn)這道題是當(dāng)時(shí)秋招...
摘要:使用位運(yùn)算數(shù)組只出現(xiàn)一次數(shù)字的數(shù)組得到最低的有效位,即兩個(gè)數(shù)不同的那一位看完上面的解法,我腦海中只有問號(hào)的存在,啥意思啊下面就讓我們簡(jiǎn)單了解一下位運(yùn)算并解析一下這三道題目。另,負(fù)數(shù)按補(bǔ)碼形式參加按位與運(yùn)算。你可做過這幾道題? 在面試的準(zhǔn)備過程中,刷算法題算是必修課,當(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ì)題解。你可做過這幾道題? 在面試的準(zhǔn)備過程中,刷算法題算是必修課,當(dāng)然我也不例外。某天,我刷到了一道神奇的題目: # 136. 只出現(xiàn)一次的數(shù)字 給定一個(gè)非空整數(shù)數(shù)組,除了某個(gè)元素只...
摘要:題目描述給定一個(gè)非空整數(shù)數(shù)組,除了某個(gè)元素只出現(xiàn)一次以外,其余每個(gè)元素均出現(xiàn)兩次。找出那個(gè)只出現(xiàn)了一次的元素。說明你的算法應(yīng)該具有線性時(shí)間復(fù)雜度。你可以不使用額外空間來實(shí)現(xiàn)嗎示例輸入輸出示例輸入輸出代碼描述 題目描述 給定一個(gè)非空整數(shù)數(shù)組,除了某個(gè)元素只出現(xiàn)一次以外,其余每個(gè)元素均出現(xiàn)兩次。找出那個(gè)只出現(xiàn)了一次的元素。 說明: 你的算法應(yīng)該具有線性時(shí)間復(fù)雜度。 你可以不使用額外空間來實(shí)...
摘要:按照思路一和思路二很容易將這題解決。在這里,我們希望將出現(xiàn)三次的數(shù)字通過操作劃掉。之后,我們使用和分別來記錄第一位和第二位的情況。最后只出現(xiàn)一次的數(shù)值應(yīng)該是保存在中,換句話說,最后應(yīng)該全是。 題目要求 Given an array of integers, every element appears three times except for one, which appears e...
閱讀 2075·2023-04-25 17:48
閱讀 3586·2021-09-22 15:37
閱讀 2939·2021-09-22 15:36
閱讀 5997·2021-09-22 15:06
閱讀 1642·2019-08-30 15:53
閱讀 1428·2019-08-30 15:52
閱讀 713·2019-08-30 13:48
閱讀 1124·2019-08-30 12:44