用XOR還原陣列 Find The Original Array of Prefix XOR Leetcode 2433

閱讀時間約 3 分鐘

題目敘述

題目會給我們一個輸入陣列,陣列裡面存放的是每個元素做XOR之後的前綴累積值

要求我們從累積值還原出原本的陣列元素值

XOR前綴累積值定義:

pref[i] = arr[0] ^ arr[1] ^ ... ^ arr[i]

詳細的題目可在這裡看到


測試範例

Example 1:

Input: pref = [5,2,0,3,1]
Output: [5,7,2,3,2]
Explanation: From the array [5,7,2,3,2] we have the following:
- pref[0] = 5.
- pref[1] = 5 ^ 7 = 2.
- pref[2] = 5 ^ 7 ^ 2 = 0.
- pref[3] = 5 ^ 7 ^ 2 ^ 3 = 3.
- pref[4] = 5 ^ 7 ^ 2 ^ 3 ^ 2 = 1.

Example 2:

Input: pref = [13]
Output: [13]
Explanation: We have pref[0] = arr[0] = 13.

約束條件

Constraints:

  • 1 <= pref.length <= 105
  • 0 <= pref[i] <= 106

演算法

其實這題同樣運用到XOR運算子Self inverse的性質

A ⊕ A = 0

依照題目定義

pref[i] = arr[0] ^ arr[1] ^ ... ^ arr[i]


我們可以知道

pref[0] = arr[0] 恰好是首項


接著

pref[1] = arr[0] ^ arr[1] 利用Self inverse的性質

計算pref[1] ^ pref[0] = (arr[0] ^ arr[1]) ^ arr[0] = arr[1]

還原出第二項 arr[1]


同理類推

計算pref[2] ^ pref[1] = (arr[0] ^ arr[1] ^ arr[2]) ^ (arr[0] ^ arr[1] )= arr[2]

還原出第三項 arr[2]


可以歸納出一個規律

arr[i] = pref[i] & pref[i-1]

由這個規則,去還原原始陣列元素值即可。



程式碼

class Solution:
 def findArray(self, pref: List[int]) -> List[int]:
  
  # Utilize the property of self-inverse
  # Self-inverse : A ⊕ A = 0
  # This means that any value XOR’d with itself gives zero.
  
  origin = [ pref[0] ]
  
  for i in range(1, len(pref)):
   
   origin.append( pref[i]^pref[i-1] )
  
  return origin

複雜度分析

時間複雜度:

O( n ) 迴圈迭代長度為O(n),和原本的陣列一樣長。

空間複雜度:

O( n ) out-of-place update創造了一個origin array,和原本的陣列長度一樣長。


關鍵知識點

學完這題之後,記得吸收沉澱一下,
回去複習 Single NumberFind the difference 這兩題喔,背後用到的都是同樣的觀念,也都用到 XOR 運算子 Self-inverse的成雙成對互相消去的特質。


Reference:

[1] Python/JS/Go/C++ O(n) by XOR self-inverse [w/ Hint] - Find The Original Array of Prefix Xor - LeetCode

86會員
425內容數
由有業界實戰經驗的演算法工程師, 手把手教你建立解題的框架, 一步步寫出高效、清晰易懂的解題答案。 著重在讓讀者啟發思考、理解演算法,熟悉常見的演算法模板。 深入淺出地介紹題目背後所使用的演算法意義,融會貫通演算法與資料結構的應用。 在幾個經典的題目融入一道題目的多種解法,或者同一招解不同的題目,擴展廣度,並加深印象。
留言0
查看全部
發表第一個留言支持創作者!
題目會給定一組規則,要求我們計算給定長度下的母音直線排列有幾種?
題目會給定一個存有整數的陣列,要求我們依照下列規則進行排序,由小排到大,升序排列。
題目會給定一個帶有Random Pointer的鏈結串列,要求我們實體複製deep copy這條鏈結串列,並且輸出副本的根結點。
題目給定一個規律變化的二進位字串,問我們第N排,第K個bit是多少? 變化的規律: 上一排的0到下一排展開成01,上一排的1到下一排展開成10 第一排初始化是0 第二排是01 第三排是0110 第四排是01101001 ...其餘依此類推 詳細的題目可在這裡看到
題目會給我們一顆二元樹的根結點,要求我們找出每一層最大的節點值。
這題的題目會給我們一個輸入整數,要求我們判斷這個整數是否可以用4^k 的形式來表達?
題目會給定一組規則,要求我們計算給定長度下的母音直線排列有幾種?
題目會給定一個存有整數的陣列,要求我們依照下列規則進行排序,由小排到大,升序排列。
題目會給定一個帶有Random Pointer的鏈結串列,要求我們實體複製deep copy這條鏈結串列,並且輸出副本的根結點。
題目給定一個規律變化的二進位字串,問我們第N排,第K個bit是多少? 變化的規律: 上一排的0到下一排展開成01,上一排的1到下一排展開成10 第一排初始化是0 第二排是01 第三排是0110 第四排是01101001 ...其餘依此類推 詳細的題目可在這裡看到
題目會給我們一顆二元樹的根結點,要求我們找出每一層最大的節點值。
這題的題目會給我們一個輸入整數,要求我們判斷這個整數是否可以用4^k 的形式來表達?
你可能也想看
Google News 追蹤
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
Thumbnail
Faker昨天真的太扯了,中國主播王多多點評的話更是精妙,分享給各位 王多多的點評 「Faker是我們的處境,他是LPL永遠繞不開的一個人和話題,所以我們特別渴望在決賽跟他相遇,去直面我們的處境。 我們曾經稱他為最高的山,最長的河,以為山海就是盡頭,可是Faker用他28歲的年齡...
Thumbnail
之前有分享過幾個遊戲化改善生活的方向,想要繼續分享
ChatGPT 幾乎已經成為我的個人助手!這讓我不禁好奇,對 ChatGPT 來說,它認識的我究竟是什麼樣子?透過與 ChatGPT 的互動,我的「用戶畫像」逐漸成形。更妙的是,這個畫像還能讓我發現自己的特點與缺點。接下來我會與大家分享如何使用 ChatGPT 進行自我分析。
Thumbnail
看到這個題目,應該八成會想到「gradually(漸漸地) like(喜歡)」吧?其實在實戰英文中還有其他很常用的講法可能是你沒聽過的喔。
Thumbnail
媒體是勞力密集的內容產業,擁有數據卻難以變現;AI公司技術深厚,卻無流量,要靠客戶數據鍛鍊模型。2022年成立的創造智能,巧妙融合媒體與AI特性,挾著三立集團資源,構築出「流量池」與「科技」兩大優勢。
Thumbnail
社會愈進步,人與人之間卻愈疏離,銀行轉帳、消費購物、買外賣都可足不出戶、藉手機跟機器互動溝通,透過大數據、雲計算及人工智能聯動,善解人意到連你下分鐘想去哪?吃什麼?都被機關算盡,貼身又貼心,日子有功,人與人之間的互動、溝通、博弈統統變得不必要,大至看醫生望聞問切亦可免,IBM人工智能系統協助醫生斷症
Thumbnail
蝦蜜?!Python沒有內建array?!剛發現這件事時,還真的有點傻眼,怎麼會沒有array這麼好用的data type呢?
Thumbnail
如果花100元讓你許一個願望,你會願意嘗試嗎? 這陣子因為阿弟的事情,我在醫院、公司還有月子中心這幾個地方繞來繞去,路途不算遠,但點跟點之間也算有些距離,回到家常常都要晚上九點十點。 有一天我在月子中心陪餐包媽聊天,聊著才發現家裡的衣服成堆都沒洗,我趕緊跟餐包媽請假回家,在樓下發動gogoro的時候
Thumbnail
對待阿茲海默氏症(以後稱: 失智症)的病患,他們的心智隨著時間一直往回走,理論上,可以使用部分照顧孩子的理論以彌補對於照顧技巧的不足..
Thumbnail
The SlowDown 播客 The SlowDown播客是由美國National Endowment for the Arts和Poetry Foundation支持,American Public Media出品,Tracy K. Smith主持,一週一播的詩歌【英文】博客。 播客不長,每條5
Thumbnail
人性本善 or 人性本惡?這個思想哲學的辯證議題,套用在職場上,也會有著不一樣的發展路線。 猶記得初到蓉城與當時老闆一同創業時,當時的行業屬性與之前跨越非常巨大,需要聘僱大量的基礎員工,算是小型的勞力服務產業的一種。原本建立著一套類似軍事化管理制度規章的是一群原本就在這個行業的江浙滬主管們,我們初來
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
Thumbnail
Faker昨天真的太扯了,中國主播王多多點評的話更是精妙,分享給各位 王多多的點評 「Faker是我們的處境,他是LPL永遠繞不開的一個人和話題,所以我們特別渴望在決賽跟他相遇,去直面我們的處境。 我們曾經稱他為最高的山,最長的河,以為山海就是盡頭,可是Faker用他28歲的年齡...
Thumbnail
之前有分享過幾個遊戲化改善生活的方向,想要繼續分享
ChatGPT 幾乎已經成為我的個人助手!這讓我不禁好奇,對 ChatGPT 來說,它認識的我究竟是什麼樣子?透過與 ChatGPT 的互動,我的「用戶畫像」逐漸成形。更妙的是,這個畫像還能讓我發現自己的特點與缺點。接下來我會與大家分享如何使用 ChatGPT 進行自我分析。
Thumbnail
看到這個題目,應該八成會想到「gradually(漸漸地) like(喜歡)」吧?其實在實戰英文中還有其他很常用的講法可能是你沒聽過的喔。
Thumbnail
媒體是勞力密集的內容產業,擁有數據卻難以變現;AI公司技術深厚,卻無流量,要靠客戶數據鍛鍊模型。2022年成立的創造智能,巧妙融合媒體與AI特性,挾著三立集團資源,構築出「流量池」與「科技」兩大優勢。
Thumbnail
社會愈進步,人與人之間卻愈疏離,銀行轉帳、消費購物、買外賣都可足不出戶、藉手機跟機器互動溝通,透過大數據、雲計算及人工智能聯動,善解人意到連你下分鐘想去哪?吃什麼?都被機關算盡,貼身又貼心,日子有功,人與人之間的互動、溝通、博弈統統變得不必要,大至看醫生望聞問切亦可免,IBM人工智能系統協助醫生斷症
Thumbnail
蝦蜜?!Python沒有內建array?!剛發現這件事時,還真的有點傻眼,怎麼會沒有array這麼好用的data type呢?
Thumbnail
如果花100元讓你許一個願望,你會願意嘗試嗎? 這陣子因為阿弟的事情,我在醫院、公司還有月子中心這幾個地方繞來繞去,路途不算遠,但點跟點之間也算有些距離,回到家常常都要晚上九點十點。 有一天我在月子中心陪餐包媽聊天,聊著才發現家裡的衣服成堆都沒洗,我趕緊跟餐包媽請假回家,在樓下發動gogoro的時候
Thumbnail
對待阿茲海默氏症(以後稱: 失智症)的病患,他們的心智隨著時間一直往回走,理論上,可以使用部分照顧孩子的理論以彌補對於照顧技巧的不足..
Thumbnail
The SlowDown 播客 The SlowDown播客是由美國National Endowment for the Arts和Poetry Foundation支持,American Public Media出品,Tracy K. Smith主持,一週一播的詩歌【英文】博客。 播客不長,每條5
Thumbnail
人性本善 or 人性本惡?這個思想哲學的辯證議題,套用在職場上,也會有著不一樣的發展路線。 猶記得初到蓉城與當時老闆一同創業時,當時的行業屬性與之前跨越非常巨大,需要聘僱大量的基礎員工,算是小型的勞力服務產業的一種。原本建立著一套類似軍事化管理制度規章的是一群原本就在這個行業的江浙滬主管們,我們初來