• leetcode 第 44 场双周赛 1 1734. 解码异或后的排列 C


    leetcode 第 44 场双周赛 1 1734. 解码异或后的排列 A

    给你一个整数数组 perm ,它是前 n 个正整数的排列,且 n 是个 奇数 。

    它被加密成另一个长度为 n - 1 的整数数组 encoded ,满足 encoded[i] = perm[i] XOR perm[i + 1] 。比方说,如果 perm = [1,3,2] ,那么 encoded = [2,1] 。

    给你 encoded 数组,请你返回原始数组 perm 。题目保证答案存在且唯一。

    示例 1:

    输入:encoded = [3,1]
    输出:[1,2,3]
    解释:如果 perm = [1,2,3] ,那么 encoded = [1 XOR 2,2 XOR 3] = [3,1]
    示例 2:

    输入:encoded = [6,5,4,6]
    输出:[2,4,1,5,3]
     

    提示:

    3 <= n < 105
    n 是奇数。
    encoded.length == n - 1

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/decode-xored-permutation
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    分析

    异或的特点是异或两次同一个数字就会不变

    唯一需要确定的就是第一个数

    后面的都是确定的数据了

    那么最后一个数字输出的结果我们是可以知道的

    考虑把所有的都异或起来

    1到n进行异或

    中间夹杂encoded数组

    找规律就完了

    代码

    class Solution {
    public:
        vector<int> decode(vector<int>& encoded) {
            int x = 0;
            vector<int> decode0;
            int length = encoded.size();
            for(int i = 1; i <= length+1; i ++){
                x ^= i;
            }
            int y = 0;
            for(int i = 1; i < length; i +=2){
                //decode0.push_back(y);
                y ^=  encoded[i];
                
            }
            int z = x^y;
            //decode0.push_back(x);
            
            decode0.push_back(z);
            for(int i = 0; i < length; i ++){
                z = z^encoded[i];
                decode0.push_back(z);
            }
            return decode0;
        }
    };
  • 相关阅读:
    LeetCode:25 K个一组翻转链表
    LeetCode:3 无重复字符的最长子串(双指针)
    Java——参数问题与final实例域
    Java——对象的构造
    配置远程服务器 安装iis 远程服务器网络无法连接
    未能找到元数据文件
    ef 设计model 标签
    visualsvn for vs2017 初始化错误
    resharper 2018.2.3破解
    C# winform 自定义函数中找不到Form中的控件和定义的全局变量
  • 原文地址:https://www.cnblogs.com/Kidgzz/p/14341988.html
Copyright © 2020-2023  润新知