【leetcode】1734. 解码异或后的排列(decode-xored-permutation)(位运算)[中等]

2023-05-16

链接

https://leetcode-cn.com/problems/decode-xored-permutation/

耗时

解题:1 h 15 min
题解:41 min

题意

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

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

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

提示:

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

思路

根据题意 perm[] 是前 n 个正整数的排列,所以 perm[0] ~ perm[n-1] 一定分别是 1~n 中的某一个数,并且没有相同的数。

n 是个 奇数,那么,设 n = 2k+1

encoded[i] = perm[i] XOR perm[i + 1],将 encoded[] 写全,则
encoded[] = {perm[0] XOR perm[1], perm[1] XOR perm[2], perm[2] XOR perm[3], …, perm[2k-2] XOR perm[2k-1], perm[2k-1] XOR perm[2k]}encoded[] 一共 2k 个元素。

观察 encoded[] 数组可以发现,encoded[] 数组的偶数的位置正好是无重复的 perm[0]~perm[2k],将 encoded[] 偶数位置的元素异或,即可得到 perm[0] XOR ... XOR perm[2k-1]perm[0] XOR ... XOR perm[n-2],perm[] 数组的 第一个元素 异或到 倒数第二个元素。然后我们又已知 perm[0] ~ perm[n-1] 一定分别是 1~n 中的某一个数,所以 perm[0] XOR ... XOR perm[n-1] = 1 XOR ... XOR n

综上,可以得到 perm[n-1] = 1 XOR ... XOR n XOR perm[0] XOR ... XOR perm[2k-1],即 perm[] 数组的最后一位元素可以通过 1 XOR ... XOR n 异或 encoded[] 偶数位置的元素异或值 得到。

得到 perm[] 的最后一位元素之后就好办了,遍历 encoded[],迭代地向前异或即可得到 perm[]。

获取公式:perm[i]=perm[i+1] XOR encoded[i]

时间复杂度: O ( n ) O(n) O(n)

AC代码

class Solution {
public:
    vector<int> decode(vector<int>& encoded) {
        int n = encoded.size()+1;
        int x = 0;
        for(int i = 1; i <= n; ++i) {
            x ^= i;
        }
        for(int i = 0; i < n-1; ++i) {
            if(i&1) continue;
            x ^= encoded[i];
        }
        vector<int> perm(n);
        perm[n-1] = x;
        for(int i = n-2; i >= 0; --i) {
            perm[i] = perm[i+1]^encoded[i];
        }
        return perm;
    }
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【leetcode】1734. 解码异或后的排列(decode-xored-permutation)(位运算)[中等] 的相关文章

  • 如何计算第 n 个排列(或告诉给定排列的字典顺序)? [复制]

    这个问题在这里已经有答案了 这个问题有两个部分 但由于我正在尝试与 Prolog 实现进行比较 解决一个问题可能会立即导致另一个问题的解决方案 给定整数列表的排列 1 2 N 我如何知道字典顺序中该排列的索引是什么 给定一个数字k 我该如何
  • UnicodeDecodeError:“charmap”编解码器无法解码位置 7240 中的字节 0x8d:字符映射到 <未定义>

    我是一名学生 正在做硕士论文 作为我论文的一部分 我正在与python 我正在阅读日志文件 csv格式化并将提取的数据写入另一个 csv格式良好的文件 但是 当读取文件时 我收到此错误 回溯 最近一次调用最后一次 文件 C Users SG
  • 使用 jQuery / AJAX 解码 JSON

    我正在尝试使用 jQuery 解码 JSON 这是我得到的结果 例如一个班级 这里有一个学生 Students Name John Grade 17 TotalClass 17 TotalCount 1 这就是我所做的 j ajax typ
  • 返回很大范围内的非重复随机值

    我想要一个函数 它可以从一组 n 个整数 0 到 n 1 中生成 k 个伪随机值 而不重复任何先前的结果 k小于或等于n O n 内存不可接受由于尺寸较大n以及我需要重新洗牌的频率 这些是我到目前为止考虑过的方法 Array 通常 如果我想
  • 查找具有重复字母的单词(排列)的排名

    尽管已经发布了很多关于这个问题的文章 但我还是发布了此内容 我不想发布答案 因为它不起作用 这篇文章的答案 查找给定字符串在所有可能的重复排列列表中的排名 https stackoverflow com questions 17620694
  • 如何在 PHP 中查找单词组合

    我有一个数组 new array array c a m t p 现在我想找到单词表中存在的单词组合 我曾尝试实现但没有成功 这是我的 php 代码 words array set powerSet new array 2 mysql ne
  • htmlspecialchars_decode() 不适用于空格

    我正在尝试使用 htmlspecialchars decode 但它不解码 nbsp 进入空间 这个问题有解决办法吗 My code query mysql query select from nowosci order by id des
  • 为什么这个算法的Big-O是N^2*log N

    将数组 a 从 a 0 填充到 a n 1 生成随机数 直到得到之前索引中不存在的数字 这是我的实现 public static int first int n int a new int n int count 0 while count
  • Haskell 生成预过滤排列

    有没有办法生成预过滤的排列 而不是这样做 filter condition permutations list 排列函数可以短路 例如 perms perms xs i j i lt xs j lt perms delete i xs 我尝
  • 如何在 MATLAB 中随机排列 3D 矩阵中的列

    我有 3D 矩阵 10000 x 60 x 20 我需要排列第二维和第三维以保持列完整 对于 2D 矩阵 我使用 RANDPERM pidx randperm size A 2 Aperm A pidx 我不能只应用 RANDPERM 两次
  • 文件包含\u00c2\u00a0,转换为字符

    我有一个 JSON 文件 其中包含这样的文本 wax and voila u00c2 u00a0At the moment you can t use our 我的简单问题是如何将这些 u 代码转换 而不是删除 为空格 撇号等 Input
  • 是否存在可以生成所有可能排列的交换序列? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 给你一个数字列表1 2 n 是否有一
  • 在 R 中生成可能排列的随机、非重复子集

    Given p离散变量 我想随机选择 k他们可能的排列 换句话说 对于变量a in 0 1 and b in 1 2 3 两个随机排列将是 0 2 and 1 3 我想在不首先生成所有可能排列的表的情况下生成这些变量 因为随着变量数量及其可
  • IllegalArgumentException Base64到图像解码android

    我想将 Base64 格式的 Web 服务中的图像解码为位图 并在我的 Android 应用程序中使用它 这是我的方法 public Bitmap getCaptcha throws IOException List
  • 使用 Alamofire 获取 JSON 并解码 - Swift 4

    我有一个 API 我也想获取请求 但我尝试使用 JSONDecoder 来转换数据类型 但失败了 我不知道如何像下面的数据一样解码这个 Json 我要拿json 响应 设置我的用户结构的内容 对我有什么建议吗 谢谢 错误域 NSCocoaE
  • 适用于 .NET 的最快 PNG 解码器

    我们的网络服务器需要先处理许多大图像的组合 然后再将结果发送到网络客户端 此过程对性能至关重要 因为服务器每小时可以接收数千个请求 现在 我们的解决方案从 HD 加载 PNG 文件 每个大约 1MB 并将它们发送到显卡 以便在 GPU 上完
  • 具有精确 k 次反转的排列数

    Let A a1 a2 an 是整数的排列1 2 n 一对索引 i j where 1 lt i lt j lt n 是排列的逆A if ai gt aj 我们给定整数n gt 0 and k gt 0 n 元素排列到底包含多少个k反转 这
  • Java中的递归排列生成错误结果

    问题是生成字典排列 起初 我的代码是这样的 public class Problem24 public static void main String args permutation 123 public static void perm
  • 有效地生成所有排列

    我需要尽快生成所有排列 https en wikipedia org wiki Permutation整数的0 1 2 n 1并得到结果作为NumPy https numpy org 形状数组 factorial n n 或者迭代此类数组的
  • 在Python中从字节串创建zip文件对象?

    我有一个字节串 保证它是 zip 文件的字节表示形式 知道这个字节串后 如何在 Python 中创建 zip 文件对象 Use io BytesIO https docs python org 3 library io html io By

随机推荐