leetcode 1734. 解码异或后的排列(位运算)
给你一个整数数组 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. 解码异或后的排列(位运算)相关推荐
- Leetcode 1734 解码异或后的排列
题目链接 题目描述 给你一个整数数组 p e r m perm perm,它是前 n n n 个正整数的排列,且 n n n 是个 奇数 . 它被加密成另一个长度为 n n n - 1 的整数数组 e ...
- leetcode 1720. 解码异或后的数组(位运算)
未知 整数数组 arr 由 n 个非负整数组成. 经编码后变为长度为 n - 1 的另一个整数数组 encoded ,其中 encoded[i] = arr[i] XOR arr[i + 1] .例如 ...
- 力扣每日一题:1720.解码异或后的数组 python异或操作
1720.解码异或后的数组 https://leetcode-cn.com/problems/decode-xored-array/ 难度:简单 题目: 未知 整数数组 arr 由 n 个非负整数组成 ...
- 【LeetCode笔记】461. 汉明距离(Java、位运算)
文章目录 题目描述 思路 & 代码 更新版 题目描述 既然是二进制,那就十有八九用位运算符 既然是不同,那肯定用异或 思路 & 代码 两种方法,总体来说都是处理异或值 方法一,转换成字 ...
- LeetCode 136. Single Number【哈希表/位运算/数学】简单
本文属于「征服LeetCode」系列文章之一,这一系列正式开始于2021/08/12.由于LeetCode上部分题目有锁,本系列将至少持续到刷完所有无锁题之日为止:由于LeetCode还在不断地创建新 ...
- Java实现 LeetCode 535 TinyURL 的加密与解密(位运算加密)
535. TinyURL 的加密与解密 TinyURL是一种URL简化服务, 比如:当你输入一个URL https://leetcode.com/problems/design-tinyurl 时,它 ...
- 134. Leetcode 136. 只出现一次的数字 (位运算-只出现一次的数字相关题目)
class Solution:def singleNumber(self, nums: List[int]) -> int:res = 0for i in range(len(nums)):re ...
- 使用^、(异或、并且)位运算 实现算数加法(+)
- HDU 6625 three arrays 求两个序列异或最小值的排列(一个可以推广的正解
目录 题意: 解析 原题描述 @(hdu 6625求两个序列异或最小值的排列) 题意: \(T(100)\)组,每组两个长度为\(n(100000)\)的排列,你可以将\(a[]\)和\(b[]\)随 ...
最新文章
- Prism for WPF初探(构建简单的模块化开发框架)
- 这个网盘搜索好像还不错
- Java中volatile关键字实现原理
- Vmware虚拟机里面的linux系统ping不通宿主机的解决方法(注意同时安装vmware和vbox虚拟机)
- 实力验证,浪潮整机柜软件定义存储性能有“数”可依
- 邮件服务器向hotmail等邮箱发信收到退信的解决方法
- objective-C nil,Nil,NULL 和NSNull的小结
- 如何批量将多个Excel文件转换为PDF - 批量Excel转PDF转换器快速教程
- 谨慎redis的timeout参数
- 仿秒拍视频网UI主题模板+Emlog内核开发
- vue项目中对于Scroll事件的节流优化
- java实现树形菜单
- 男孩子学医好还是学计算机好,男孩子学医选什么专业好 最有前景的医学类专业...
- 红色印章制作过程记录
- 我是如何锻炼写作的?我的知乎“撕逼”式写作。
- 第二组第一次成团哈哈哈哈
- 【算法】最长公共子序列(LCS)
- 基于TI AM5728(浮点双DSP C66x +双ARM Cortex-A15)的开发板
- 简单的部门递归兰巴达写法
- 月经贴——.net前景何妨!
热门文章
- C++ STL之Set
- wireshark源代码分析
- java开发实战经典答案百度云,含面试题+答案
- 处理效应模型stata实例_stata︱政策处理效应模型sata基本命令汇总
- configure: error: You need a C++ compiler for C++ support.
- 蓝桥杯java 基础练习 十六进制转十进制
- powershell开源新闻及简介
- MyEclipse中SVN的使用方法
- ComponentOne FlexGrid for WinForms 中文版快速入门(9)—过滤
- TabActivity中子Activity相互跳转,及某个Tab需弹出窗的解决方案