
LeetCode——1720 解码异或后的数组(JAVA)
发布日期:2021-05-07 06:26:36
浏览次数:19
分类:精选文章
本文共 966 字,大约阅读时间需要 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
<= 104 encoded.length
==n - 1
- 0 <=
encoded[i]
<= 105 - 0 <=
first
<= 105
思路
本题还是比较简单的,想清楚之后就很好做,其实就是一个倒推的过程。
看第一个样例:
1 XOR 0 = 10 XOR 2 = 22 XOR 1 = 3
题目给出的信息是[1, 2, 3]
以及左边的一个1
,因此,就需要倒推出XOR
右边的0
,然后再由0
和2
倒推出2
,再由2
和3
倒推出1
,就能得到答案[1, 0, 2, 1]
了。
这里有一个异或运算的知识:
若a^b = c,则a = b^c(或b = a^c).
所以,要想倒推出XOR
右边的值,只需要将已知的两个数做异或即可(也就是b = a^c
这种情况)。
最后,因为上一次倒推出来的答案,下一次还要用到,所以还要设置一个pre
来记录前一次推出的答案。
代码
public class Solution { ArrayListlist = new ArrayList (); public int[] decode(int[] encoded, int first) { list.add(first); int pre = first; for(int i=0;i
发表评论
最新留言
逛到本站,mark一下
[***.202.152.39]2025年04月07日 17时59分14秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
大白话说Java反射:入门、使用、原理
2021-05-09
MySQL用户管理:添加用户、授权、删除用户
2021-05-09
比技术还重要的事
2021-05-09
linux线程调度策略
2021-05-09
软中断和实时性
2021-05-09
Linux探测工具BCC(可观测性)
2021-05-09
流量控制--2.传统的流量控制元素
2021-05-09
SNMP介绍及使用,超有用,建议收藏!
2021-05-09
51nod 1596 搬货物(二进制处理)
2021-05-09
来自星星的祝福(容斥+排列组合)
2021-05-09
Hmz 的女装(递推)
2021-05-09
HDU5589:Tree(莫队+01字典树)
2021-05-09
不停机替换线上代码? 你没听错,Arthas它能做到
2021-05-09
sharding-jdbc 分库分表的 4种分片策略,还蛮简单的
2021-05-09
分库分表的 9种分布式主键ID 生成方案,挺全乎的
2021-05-09
MySQL不会丢失数据的秘密,就藏在它的 7种日志里
2021-05-09
Python开发之序列化与反序列化:pickle、json模块使用详解
2021-05-09
回顾-生成 vs 判别模型-和图
2021-05-09
采坑 - 字符串的 "" 与 pd.isnull()
2021-05-09