LeetCode 1720. 解码异或后的数组(位运算)
发布日期:2021-07-01 03:35:43 浏览次数:2 分类:技术文章

本文共 1006 字,大约阅读时间需要 3 分钟。

文章目录

1. 题目

未知 整数数组 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 。可以证明答案存在并且是唯一的。

示例 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] 提示:2 <= n <= 10^4encoded.length == n - 10 <= encoded[i] <= 10^50 <= first <= 10^5

2. 解题

  • 一个数异或偶数次就抵消了,相当于没有
  • encoded[i] = arr[i] ^ arr[i + 1], encoded[i] ^ arr[i] = arr[i] ^ arr[i + 1] ^ arr[i] = arr[i+1]
class Solution {
public: vector
decode(vector
& encoded, int first) {
int n = encoded.size(); vector
ans(n+1); ans[0] = first; for(int i = 0; i < n; i++) {
ans[i+1] = ans[i]^encoded[i]; } return ans; }};

52 ms 24.5 MB C++


我的CSDN

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!

Michael阿明

转载地址:https://michael.blog.csdn.net/article/details/112426120 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:LeetCode 1721. 交换链表中的节点(快慢指针)
下一篇:LeetCode 1717. 删除子字符串的最大得分

发表评论

最新留言

路过按个爪印,很不错,赞一个!
[***.219.124.196]2024年04月08日 05时03分01秒