【技术分享-真题实战】找出前缀异或的原始数组(Java)

简介: 【力扣-2433】数组,异或、位运算

题目详情

给你一个长度为 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 <= 105
  • 0 <= pref[i] <= 106

解题思路

整理题目需求:

1、两个数组

2、满足要求A[0] = B [0]    A[1] = B[0]^B[1]    A [2] = B[0]^B[1]^B[2]

即 A[i] =.  B[0] ^ B[1] ^...^B[i]

3、已知 A  求  B

做题思路:

1、什么是位运算^   :两个数进行位运算,即将两个数的二进制进行位运算,二进制相同为0,不同为1

如: 5^7 =.    101

   111

------------

    010       =    2

2、位运算的性质:   A ^ B = C    ===>    B  =   A ^C    

3、找规律:

arr[0] = pref[0]

pref[1] = arr[0]^arr[1];


arr[1] = pref[1]^arr[0] = pref[1] ^ pref[0];

arr[2] = pref[2]^arr[0]^arr[1] = pref[1]^pref[2];
arr[3] = pref[3] ^ arr[0]^arr[1]^arr[2] = pref[3]^pref[2];      

 ...

arr[i] = pref[i-1] ^ pref[i];

综上 arr[i] = pref[i-1] ^ pref[i];



publicint[] findArray(int[] pref) {
int []arr=newint[pref.length];
for (inti=0; i<arr.length; i++) {
if(i==0){
arr[i] =pref[0];
            }else {
arr[i] =pref[i] ^pref[i-1];
            }
        }
returnarr;
    }

本题难点:

1、不知道什么是异或运算。

2、没找到规律,不知道位运算的交换律,可能会将数组元素转为二进制硬算。

相关文章
|
13天前
|
人工智能 Java API
Java与大模型集成实战:构建智能Java应用的新范式
随着大型语言模型(LLM)的API化,将其强大的自然语言处理能力集成到现有Java应用中已成为提升应用智能水平的关键路径。本文旨在为Java开发者提供一份实用的集成指南。我们将深入探讨如何使用Spring Boot 3框架,通过HTTP客户端与OpenAI GPT(或兼容API)进行高效、安全的交互。内容涵盖项目依赖配置、异步非阻塞的API调用、请求与响应的结构化处理、异常管理以及一些面向生产环境的最佳实践,并附带完整的代码示例,助您快速将AI能力融入Java生态。
152 12
|
17天前
|
Java 开发者
Java并发编程:CountDownLatch实战解析
Java并发编程:CountDownLatch实战解析
308 100
|
20天前
|
存储 前端开发 Java
【JAVA】Java 项目实战之 Java Web 在线商城项目开发实战指南
本文介绍基于Java Web的在线商城技术方案与实现,涵盖三层架构设计、MySQL数据库建模及核心功能开发。通过Spring MVC + MyBatis + Thymeleaf实现商品展示、购物车等模块,提供完整代码示例,助力掌握Java Web项目实战技能。(238字)
150 0
|
21天前
|
Java
Java 数组学习笔记
本文整理Java数组常用操作:遍历、求和、查找、最值及二维数组行求和等典型练习,涵盖静态初始化、元素翻倍、去极值求平均等实例,帮助掌握数组基础与应用。
|
2月前
|
数据采集 JSON Java
Java爬虫获取1688店铺所有商品接口数据实战指南
本文介绍如何使用Java爬虫技术高效获取1688店铺商品信息,涵盖环境搭建、API调用、签名生成及数据抓取全流程,并附完整代码示例,助力市场分析与选品决策。
|
2月前
|
存储 缓存 Java
Java数组全解析:一维、多维与内存模型
本文深入解析Java数组的内存布局与操作技巧,涵盖一维及多维数组的声明、初始化、内存模型,以及数组常见陷阱和性能优化。通过图文结合的方式帮助开发者彻底理解数组本质,并提供Arrays工具类的实用方法与面试高频问题解析,助你掌握数组核心知识,避免常见错误。
|
2月前
|
算法 Java 开发者
Java流程控制:条件与循环结构实战
本文深入讲解编程中的流程控制结构,涵盖条件语句(if-else、switch)、循环结构(for、while、do-while)及循环控制关键字(break、continue)的使用技巧与实战案例,帮助开发者写出更清晰、高效的代码。
|
21天前
|
数据采集 存储 弹性计算
高并发Java爬虫的瓶颈分析与动态线程优化方案
高并发Java爬虫的瓶颈分析与动态线程优化方案
Java 数据库 Spring
59 0

热门文章

最新文章