
LeetCode 训练场:1720. 解码异或后的数组
发布日期:2021-05-08 06:29:56
浏览次数:19
分类:精选文章
本文共 1171 字,大约阅读时间需要 3 分钟。
题目
- 难度:简单
描述
未知 整数数组
arr
由n
个非负整数组成。经编码后变为长度为
n - 1
的另一个整数数组encoded
,其中encoded[i] = arr[i] XOR arr[i + 1]
。例如,arr = [1,0,2,1]
经编码后得到encoded = [1,2,3]
。给你编码后的数组
encoded
和原数组arr
的第一个元素first
(arr[0]
)。请解码返回原数组
arr
。可以证明答案存在并且是唯一的。示例 1:
输入: encoded = [1,2,3], first = 1
输出: [1,0,2,1] 解释: 若 arr = [1,0,2,1] ,那么 first = 1 且 encoded = [1 XOR 0, 0 XOR 2, 2 XOR 1] = [1,2,3]示例 2:
输入: encoded = [6,2,7,3], first = 4
输出: [4,2,0,7,4]提示:
- 2 < = n < = 1 0 4 2 <= n <= 10^4 2<=n<=104
encoded.length == n - 1
- 0 <= encoded[i] <= 105
- 0 <= first <= 105
方法
思路
-
因为
a ^ b = c
,a ^ b ^ b = a
,所以得知c ^ b = a
-
观察题目,可以发现
arr[0] ^ arr[1] = encode[0]
、arr[1] ^ arr[2] = encode[1]
……,已知encode
数组和arr[0]
,运用上面的式子可以知道arr[1] = arr[0] ^ encode[0]
、arr[2] = arr[1] ^ encode[1]
…… -
因为主要是遍历了一趟数组,所以时间复杂度为
O(n)
;
实现
class Solution { public int[] decode(int[] encoded, int first) { // 编码前的数组 int[] arr = new int[encoded.length + 1]; // 编码前数组的第一个元素 arr[0] = first; // arr[i] ^ arr[i + 1] = encode[i],反过来 arr[i + 1] = encode[i] ^ arr[i] for(int i = 0; i < arr.length - 1; i++){ arr[i + 1] = arr[i] ^ encoded[i]; } return arr; }}
发表评论
最新留言
留言是一种美德,欢迎回访!
[***.207.175.100]2025年04月08日 20时38分42秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
PyQt5之音乐播放器
2021-05-09
Redis进阶实践之十八 使用管道模式提高Redis查询的速度
2021-05-09
SQL注入
2021-05-09
MPI Maelstrom POJ - 1502 ⭐⭐ 【Dijkstra裸题】
2021-05-09
Problem 330A - Cakeminator (思维)
2021-05-09
LeetCode75 颜色分类 (三路快排C++实现与应用)
2021-05-09
C语言+easyX图形库的推箱子实现
2021-05-09
调试vs2019代码的流程
2021-05-09
脱壳与加壳-加壳-6-代码实现加密导入表
2021-05-09
Typora配置PicGo时,提示Failed to fetch
2021-05-09
bcolz的新操作
2021-05-09
zmq的send
2021-05-09
delete对象时会自动调用类的析构函数
2021-05-09
POD类型
2021-05-09
const与常量,傻傻分不清楚~
2021-05-09
Head First设计模式——迭代器模式
2021-05-09
MongoDB版本及存储引擎区别
2021-05-09
shell echo单行和多行文字定向写入到文件中
2021-05-09
cmp命令
2021-05-09
Linux 磁盘管理(df fu fdisk mkfs mount)
2021-05-09