给你一个整数数组 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]

解题思路

设x=1 ^ 2 ^ 3 ^ …^n
那么perm[0]=x ^ encoded[1] ^ encoded[3]…
因为encoded[i] = perm[i] XOR perm[i + 1],所以perm[i + 1]=encoded[i] XOR perm[i]
若知道了perm[0]自然可以推出perm[1],如此类推,就可以推出所有

推导

为什么可知perm[0]=x ^ encoded[1] ^ encoded[3]…?
因为encoded[1] = perm[1] XOR perm[2] ,encoded[3] = perm[3] XOR perm[4]…
因此可得encoded[1] ^ encoded[3]…= perm[1]^ perm[2]^ perm[3]^ perm[4]…

又因为perm是前 n 个正整数的排列,所以
perm[0]perm[1] perm[2]^ perm[3]^ perm[4]…=1 ^ 2 ^ 3 ^ …^n=x

因此可得perm[0]=x ^ encoded[1] ^ encoded[3]…

代码

func decode(encoded []int) []int {n:=len(encoded)+1odd:=0for i := 1; i < len(encoded) ; i+=2  {odd^=encoded[i]}all:=0for i := 1; i <=n ; i++ {all^=i}pre:=all^oddres := make([]int, n)res[0]=prefor j, code := range encoded {cur:=pre^coderes[j+1]=curpre=cur}return res
}

leetcode 1734. 解码异或后的排列(位运算)相关推荐

  1. Leetcode 1734 解码异或后的排列

    题目链接 题目描述 给你一个整数数组 p e r m perm perm,它是前 n n n 个正整数的排列,且 n n n 是个 奇数 . 它被加密成另一个长度为 n n n - 1 的整数数组 e ...

  2. leetcode 1720. 解码异或后的数组(位运算)

    未知 整数数组 arr 由 n 个非负整数组成. 经编码后变为长度为 n - 1 的另一个整数数组 encoded ,其中 encoded[i] = arr[i] XOR arr[i + 1] .例如 ...

  3. 力扣每日一题:1720.解码异或后的数组 python异或操作

    1720.解码异或后的数组 https://leetcode-cn.com/problems/decode-xored-array/ 难度:简单 题目: 未知 整数数组 arr 由 n 个非负整数组成 ...

  4. 【LeetCode笔记】461. 汉明距离(Java、位运算)

    文章目录 题目描述 思路 & 代码 更新版 题目描述 既然是二进制,那就十有八九用位运算符 既然是不同,那肯定用异或 思路 & 代码 两种方法,总体来说都是处理异或值 方法一,转换成字 ...

  5. LeetCode 136. Single Number【哈希表/位运算/数学】简单

    本文属于「征服LeetCode」系列文章之一,这一系列正式开始于2021/08/12.由于LeetCode上部分题目有锁,本系列将至少持续到刷完所有无锁题之日为止:由于LeetCode还在不断地创建新 ...

  6. Java实现 LeetCode 535 TinyURL 的加密与解密(位运算加密)

    535. TinyURL 的加密与解密 TinyURL是一种URL简化服务, 比如:当你输入一个URL https://leetcode.com/problems/design-tinyurl 时,它 ...

  7. 134. Leetcode 136. 只出现一次的数字 (位运算-只出现一次的数字相关题目)

    class Solution:def singleNumber(self, nums: List[int]) -> int:res = 0for i in range(len(nums)):re ...

  8. 使用^、(异或、并且)位运算 实现算数加法(+)

  9. HDU 6625 three arrays 求两个序列异或最小值的排列(一个可以推广的正解

    目录 题意: 解析 原题描述 @(hdu 6625求两个序列异或最小值的排列) 题意: \(T(100)\)组,每组两个长度为\(n(100000)\)的排列,你可以将\(a[]\)和\(b[]\)随 ...

最新文章

  1. Prism for WPF初探(构建简单的模块化开发框架)
  2. 这个网盘搜索好像还不错
  3. Java中volatile关键字实现原理
  4. Vmware虚拟机里面的linux系统ping不通宿主机的解决方法(注意同时安装vmware和vbox虚拟机)
  5. 实力验证,浪潮整机柜软件定义存储性能有“数”可依
  6. 邮件服务器向hotmail等邮箱发信收到退信的解决方法
  7. objective-C nil,Nil,NULL 和NSNull的小结
  8. 如何批量将多个Excel文件转换为PDF - 批量Excel转PDF转换器快速教程
  9. 谨慎redis的timeout参数
  10. 仿秒拍视频网UI主题模板+Emlog内核开发
  11. vue项目中对于Scroll事件的节流优化
  12. java实现树形菜单
  13. 男孩子学医好还是学计算机好,男孩子学医选什么专业好 最有前景的医学类专业...
  14. 红色印章制作过程记录
  15. 我是如何锻炼写作的?我的知乎“撕逼”式写作。
  16. 第二组第一次成团哈哈哈哈
  17. 【算法】最长公共子序列(LCS)
  18. 基于TI AM5728(浮点双DSP C66x +双ARM Cortex-A15)的开发板
  19. 简单的部门递归兰巴达写法
  20. 月经贴——.net前景何妨!

热门文章

  1. C++ STL之Set
  2. wireshark源代码分析
  3. java开发实战经典答案百度云,含面试题+答案
  4. 处理效应模型stata实例_stata︱政策处理效应模型sata基本命令汇总
  5. configure: error: You need a C++ compiler for C++ support.
  6. 蓝桥杯java 基础练习 十六进制转十进制
  7. powershell开源新闻及简介
  8. MyEclipse中SVN的使用方法
  9. ComponentOne FlexGrid for WinForms 中文版快速入门(9)—过滤
  10. TabActivity中子Activity相互跳转,及某个Tab需弹出窗的解决方案