劍指Offer 陣列中唯一隻出現一次的數字
題目:
在一個數組中除了一個數字只出現一次之外,其他數字都出現了三次。請找出那個只出現一次的數字。你可以假設滿足條件的數字一定存在。
思考題:
如果要求只使用 O(n) 的時間和額外 O(1) 的空間,該怎麼做呢?
樣例
輸入:[1,1,1,2,2,2,3,4,4,4]
輸出:3
解答:
import sys
class Solution(object):
def findNumberAppearingOnce(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
bits = [0] * 32
result = 0
for i in range(len(bits)):
for j in range(len(nums)):
bits[i] += (nums[j] >> i) & 0b1
bits[i] = (bits[i] % 3) << i
result = result | bits[i]
return result
相關推薦
劍指Offer 陣列中唯一隻出現一次的數字
題目: 在一個數組中除了一個數字只出現一次之外,其他數字都出現了三次。請找出那個只出現一次的數字。你可以假設滿足條件的數字一定存在。 思考題: 如果要求只使用 O(n) 的時間和額外 O(1) 的空間,該怎麼做呢? 樣例 輸入:[1,1,1,2,2,2,3,4,4,4] 輸出:3 解
【Java】 劍指offer(56-2) 陣列中唯一隻出現一次的數字 《劍指Offer》Java實現合集 56-1) 陣列中只出現一次的兩個數字 《劍指Offer》Java實現合集
本文參考自《劍指offer》一書,程式碼採用Java語言。 更多:《劍指Offer》Java實現合集 題目 在一個數組中除了一個數字只出現一次之外,其他數字都出現了三次。請找出那個只出現一次的數字。 思路 這道題中數字出現了三次,無法像56-1) 陣列
面試題:陣列中唯一隻出現一次的數字
在一個數組中除一個數字只出現一次之外,其他數字都出現了三次。請找出那個只出現一次的數字。 思路:我們把陣列中所有數字的二進位制表示的每一位都加起來。如果某一位的和能被3整除,那麼那個只出現一次的數字二進位制表示中對應的那一位是0;否則就是1。 程式碼如下: int Find
劍指offer之第一個只出現一次的字元
1.題目描述 在一個字串(0<=字串長度<=10000,全部由字母組成)中找到第一個只出現一次的字元,並返回它的位置, 如果沒有則返回 -1(需要區分大小寫). 2.問題分析 第一次遍歷,統計每個字串出現的次數; 第二次遍歷,如果有那個字元出現次數為1,
(劍指offer)第一個只出現一次的字元
時間限制:1秒 空間限制:32768K 熱度指數:200407 本題知識點: 字串 題目描述 在一個字串(0<=字串長度<=10000,全部由字母組成)中找到第一個只出現一次的字元,並返回它的位置, 如果沒有則返回 -1(需要區分大小寫). 思路1(Map) im
【劍指Offer】第一個只出現一次的字元
題目連結 題目描述 在一個字串(0<=字串長度<=10000,全部由字母組成)中找到第一個只出現一次的字元,並返回它的位置, 如果沒有則返回 -1(需要區分大小寫). 分析:簡單計數並
[劍指offer] 34. 第一個只出現一次的字元
題目描述 在一個字串(0<=字串長度<=10000,全部由字母組成)中找到第一個只出現一次的字元,並返回它的位置, 如果沒有則返回 -1(需要區分大小寫). 一次遍歷儲存到雜湊表 一次遍歷取Value為1的第一個字元的索引 cla
[劍指offer] 34. 第一個只出現一次的字符
大小 返回 pin col value title repeat pub char 題目描述 在一個字符串(0<=字符串長度<=10000,全部由字母組成)中找到第一個只出現一次的字符,並返回它的位置, 如果沒有則返回 -1(需要區分大小寫). 一次遍歷存儲到
python劍指offer系列第一個只出現一次的字元
題目:在一個字串(1<=字串長度<=10000,全部由字母組成)中找到第一個只出現一次的字元,並返回它的位置思路:建立一個雜湊表即可,python用字典代替,但是是無序的,所以再遍歷一次字串# -*- coding:utf-8 -*- class Solution
劍指offer-(第一個只出現一次的字元)
題目描述 在一個字串(0<=字串長度<=10000,全部由字母組成) 中找到第一個只出現一次的字元,並返回它的位置, 如果沒有則返回 -1(需要區分大小寫). 解題思路: 1、採用
資料結構面試題總結5——陣列:找出陣列中唯一一個出現一次的元素
問題描述:一個數組其中有一個元素出現了一次(奇次),其他元素都出現兩次(偶數次數),找出出現一次(奇次)的元素。 分析:碰到這種偶次奇次的問題,首先要想一下位運算中的異或。一個數異或本身為0,一個數異或0不變。a ^ a = 0, a ^ 0 = a。 這個題中,我們可以把
劍指offer:第一個只出現一次的字元位置
public class Solution { public int FirstNotRepeatingChar(String str) { int flag = -1; if(str.length() == 0) return flag;
劍指offer--17.第一個只出現一次的字符
pes bject type tags ati 需要 時間限制 types label map默認對key進行排序,unordered_map不對鍵或值進行排序,但是也不是默認插入的順序 ------------------------------------------
劍指offer----陣列中只出現一次的數字
題目描述 一個整型數組裡除了兩個數字之外,其他的數字都出現了偶數次。請寫程式找出這兩個只出現一次的數字。 //所有數字異或,最後得到的是兩個只出現一次的數字異或的結果,從低位到高位 //找到第一異或為1的位,記下來,根據這個位,將原來的陣列分做兩部分,可解 cl
劍指offer----陣列中出現次數超過一半的數字
陣列中有一個數字出現的次數超過陣列長度的一半,請找出這個數字。例如輸入一個長度為9的陣列{1,2,3,2,2,2,5,4,2}。由於數字2在陣列中出現了5次,超過陣列長度的一半,因此輸出2。如果不存在則輸出0。 思路一:排序 將數組裡元素從排序,然後用中間元素判
劍指offer——陣列中出現次數超過一半的數字(39題)
題目:陣列中有一個字出現的次數超過陣列長度的一半,請找出這個數字。例如,輸入一個長度為9的陣列{1,2,3,2,2,2,5,4,2}。由於數字2在陣列中出現了5次,超過陣列長度的一半,因此輸出2。 解題思想:一定要緊緊抓住輸出數字出現的次數超過陣列長度的一半,這一特性。
劍指offer-陣列中只出現一次的數字(陣列)
題目描述 一個整型數組裡除了兩個數字之外,其他的數字都出現了偶數次。請寫程式找出這兩個只出現一次的數字。 這題想到用map,類似於“陣列中出現次數超過一半的陣列”https://blog.csdn.net/Mr_xuexi/article/details/84555464 其中,data
劍指offer-陣列中出現次數超過一半的數字(陣列)
題目描述 陣列中有一個數字出現的次數超過陣列長度的一半,請找出這個數字。例如輸入一個長度為9的陣列{1,2,3,2,2,2,5,4,2}。由於數字2在陣列中出現了5次,超過陣列長度的一半,因此輸出2。如果不存在則輸出0。 看到這個就想到了c++中的map,C++中map提供的是一種鍵值對容器
劍指offer-陣列中出現數字超過一半得數字
28.陣列中出現數字超過一半的數字 題目描述 陣列中有一個數字出現的次數超過陣列長度的一半,請找出這個數字。例如輸入一個長度為9的陣列{1,2,3,2,2,2,5,4,2}。由於數字2在陣列中出現了5次,超過陣列長度的一半,因此輸出2。如果不存在則輸出0。 解題思路:若陣列中有數字出現的
[劍指offer]陣列中出現一半的數字
思路: 方法一: 用hashmap儲存數字以及出現的次數,遍歷陣列,找到該數字時就將value+1,在遍歷前判斷value值是否大於陣列長度的一半 方法二: 先對陣列排序,在陣列中間的數即為所求的數 實現: 方法一: import java.util.HashMap; public c