我是靠谱客的博主 小巧板栗,最近开发中收集的这篇文章主要介绍LeetCode 2433. 【位运算, 差分】找出前缀异或的原始数组,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

CSDN话题挑战赛第2期
参赛话题:学习笔记

给你一个长度为 n 的 整数 数组 pref 。找出并返回满足下述条件且长度为 n 的数组 arr :

pref[i] = arr[0] ^ arr[1] ^ … ^ arr[i].
注意 ^ 表示 按位异或(bitwise-xor)运算。

可以证明答案是 唯一 的。

示例 1:

输入:pref = [5,2,0,3,1]
输出:[5,7,2,3,2]
解释:从数组 [5,7,2,3,2] 可以得到如下结果:

  • pref[0] = 5
  • pref[1] = 5 ^ 7 = 2
  • pref[2] = 5 ^ 7 ^ 2 = 0
  • pref[3] = 5 ^ 7 ^ 2 ^ 3 = 3
  • pref[4] = 5 ^ 7 ^ 2 ^ 3 ^ 2 = 1
    示例 2:

输入:pref = [13]
输出:[13]
解释:pref[0] = arr[0] = 13
提示:

1 <= pref.length <= 10^5
0 <= pref[i] <= 10^6
解题
方法一:差分思想 位运算
思路
本题类似于给出前缀和数组让还原原数组,可以利用差分的思想来做,而异或运算的逆运算是它本身(自反性:p⊕q⊕q=p⊕0=pp⊕q⊕q=p⊕0=p),所以:origin[i] = pref[i] ^ pref[i - 1]。

代码
class Solution {
public int[] findArray(int[] pref) {
int n = pref.length;
int[] origin = new int[n];
origin[0] = pref[0];
for (int i = 1; i < n; ++i) {
origin[i] = pref[i] ^ pref[i - 1];
}
return origin;
}
}

最后

以上就是小巧板栗为你收集整理的LeetCode 2433. 【位运算, 差分】找出前缀异或的原始数组的全部内容,希望文章能够帮你解决LeetCode 2433. 【位运算, 差分】找出前缀异或的原始数组所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(60)

评论列表共有 0 条评论

立即
投稿
返回
顶部