Decode XORed Array

There is a hidden integer array arr that consists of n non-negative integers.

It was encoded into another integer array encoded of length n - 1, such that encoded[i] = arr[i] XOR arr[i + 1]. For example, if arr = [1,0,2,1], then encoded = [1,2,3].

You are given the encoded array. You are also given an integer first, that is the first element of arr, i.e. arr[0].

Return the original array arr. It can be proved that the answer exists and is unique.

Example:

Input: encoded = [1,2,3], first = 1
Output: [1,0,2,1]
Explanation: If arr = [1,0,2,1], then first = 1 and encoded = [1 XOR 0, 0 XOR 2, 2 XOR 1] = [1,2,3]

Approach:

C++

#include <bits/stdc++.h>
using namespace std;

vector<intdecode(vector<int&encodedint first)
{
    vector<intres;
    res.push_back(first);

    for (int i = 0i < encoded.size(); i++)
    {
        int a = encoded[i];
        int b = res[i];
        int c; //res[i+1]
        //a=b^c

        //xor both sides by a
        //a^c=b

        //xor both sides by a
        //c=a^b;

        res.push_back(a ^ b);
    }
    return res;
}

int main()
{
    vector<intencoded = {123};
    int first = 1;

    vector<intarr = decode(encodedfirst);

    cout << "[";

    for (int i = 0i < arr.size(); i++)
    {
        cout << arr[i];
        if (i != arr.size() - 1)
            cout << ",";
    }
    cout << "]";

    return 0;
}


No comments:

Post a Comment