leetcode打卡-1720解码异或后的数组
五一这几天玩的有点嗨,今天看书脑子嗡嗡的,还是先整点简单题适应一下学习节奏好了。
题目描述
未知整数数组arr由n个非负整数组成。
经编码后变为长度为n - 1的另一个整数数组encoded ,其中encoded[i] = arr[i] XOR arr[i + 1]
。例如,arr = [1,0,2,1]
经编码后得到encoded = [1,2,3]
。
给你编码后的数组encoded和原数组arr的第一个元素first(arr[0])
。
请解码返回原数组arr。可以证明答案存在并且是唯一的。
示例:
输入:
encoded = [6,2,7,3]
, first = 4
输出:
[4,2,0,7,4]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/decode-xored-array
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题思路
1. 位运算性质计算
异或满足交换律和结合律,对原式进行计算可得:
arr[i] ^ arr[i + 1] = encoded[i]
arr[i] ^ arr[i + 1] ^ encoded[i] = encoded[i] ^ encoded[i] = 0
arr[i] ^ arr[i + 1] ^ arr[i + 1] ^ encoded[i] = 0 ^ arr[i + 1]
arr[i] ^ encoded[i] = arr[i + 1]
所以遍历encoded数组即可迭代算出完整的arr数组.
代码如下:
1 | class Solution: |
练习一下Rust实现
1 | impl Solution { |
- 时间复杂度: O(n)
- 空间复杂度: O(1)
总结
几种位运算的基本规则要记牢。