做網站需要理解什么今天的特大新聞有哪些
前言
經過前期的基礎訓練以及部分實戰(zhàn)練習,粗略掌握了各種題型的解題思路。后續(xù)開始專項練習。
描述
未知?整數(shù)數(shù)組?
arr
?由?n
?個非負整數(shù)組成。經編碼后變?yōu)殚L度為?
n - 1
?的另一個整數(shù)數(shù)組?encoded
?,其中?encoded[i] = arr[i] XOR arr[i + 1]
?。例如,arr = [1,0,2,1]
?經編碼后得到?encoded = [1,2,3]
?。給你編碼后的數(shù)組?
encoded
?和原數(shù)組?arr
?的第一個元素?first
(arr[0]
)。請解碼返回原數(shù)組?
arr
?。可以證明答案存在并且是唯一的。示例 1:
輸入:encoded = [1,2,3], first = 1 輸出:[1,0,2,1] 解釋:若 arr = [1,0,2,1] ,那么 first = 1 且 encoded = [1 XOR 0, 0 XOR 2, 2 XOR 1] = [1,2,3]示例 2:
輸入:encoded = [6,2,7,3], first = 4 輸出:[4,2,0,7,4]
實現(xiàn)原理與步驟
異或演化公式推導
encoded[i] = arr[i] ^?arr[i + 1]
=>encoded[i]^arr[i]=arr[i]^arr[i]^arr[i+1]
=>encoded[i]^arr[i]=0^arr[i+1]
=>encoded[i]^arr[i]=arr[i+1]
=>arr[i]=encode[i-1]^arr[i-1]
arr[0]=first
代碼實現(xiàn)
class Solution {/*** 異或的性質:* 1.異或自己為0* 2.異或0等于自身* 3.異或滿足交換律和結合率* encoded[i]=arr[i] ^ arr[i+1]*=> encoded[i]^arr[i]=arr[i+1]*/public int[] decode(int[] encoded, int first) {int n=encoded.length+1;int[] arr=new int[n];arr[0]=first;for(int i=1;i<n;i++){arr[i]=arr[i-1]^encoded[i-1];}return arr;}
}