2021-5-6 力扣每日一题

1720 解码异或后的数组

这几天在建模,不好意思鸽了几天的题解。以后尽量不会鸽的。

问题描述:

​ 未知 整数数组 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中的,为什么7和4的异或等于3?这个是基于位运算,我们都知道异或表示的意思是不同为真。下图可以解释这一点。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5Lvoz3K0-1620267996277)(F:/%E7%AC%94%E8%AE%B0%E5%9B%BE%E7%89%87%E4%B8%93%E7%94%A8%E6%96%87%E4%BB%B6%E5%A4%B9/image-20210506102237004.png)]

  • 这里是按位进行异或的,所以3和7的异或等于4。那么我们这里就容易发现,3和7的异或是4,同时,4和7的异或也等于3,3和4的异或等于7。也就是说,在异或的关系中,这三个变量是互相成立的。

  • 懂了这一点,我们的代码就出现了

Java代码

/** 
* @Description: 力扣1720题题解
* @return: 返回结果
* @Author: Mr.Gao
* @Date: 2021/5/6 
*/

public int[] decode(int[] encoded, int first) {
    int n = encoded.length;
    int [] re = new int[n+1];
    re[0] = first;
    for (int i = 1; i <= n; i++) {
        re[i] = re[i-1]^encoded[i-1];
    }
    return re;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值