【技术分享-真题实战】找出前缀异或的原始数组(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、没找到规律,不知道位运算的交换律,可能会将数组元素转为二进制硬算。

相关文章
|
5月前
|
存储 人工智能 算法
从零掌握贪心算法Java版:LeetCode 10题实战解析(上)
在算法世界里,有一种思想如同生活中的"见好就收"——每次做出当前看来最优的选择,寄希望于通过局部最优达成全局最优。这种思想就是贪心算法,它以其简洁高效的特点,成为解决最优问题的利器。今天我们就来系统学习贪心算法的核心思想,并通过10道LeetCode经典题目实战演练,带你掌握这种"步步为营"的解题思维。
|
5月前
|
安全 Java 开发者
告别NullPointerException:Java Optional实战指南
告别NullPointerException:Java Optional实战指南
318 119
|
6月前
|
人工智能 Java API
Java AI智能体实战:使用LangChain4j构建能使用工具的AI助手
随着AI技术的发展,AI智能体(Agent)能够通过使用工具来执行复杂任务,从而大幅扩展其能力边界。本文介绍如何在Java中使用LangChain4j框架构建一个能够使用外部工具的AI智能体。我们将通过一个具体示例——一个能获取天气信息和执行数学计算的AI助手,详细讲解如何定义工具、创建智能体并处理执行流程。本文包含完整的代码示例和架构说明,帮助Java开发者快速上手AI智能体的开发。
2207 8
|
6月前
|
人工智能 Java API
Java与大模型集成实战:构建智能Java应用的新范式
随着大型语言模型(LLM)的API化,将其强大的自然语言处理能力集成到现有Java应用中已成为提升应用智能水平的关键路径。本文旨在为Java开发者提供一份实用的集成指南。我们将深入探讨如何使用Spring Boot 3框架,通过HTTP客户端与OpenAI GPT(或兼容API)进行高效、安全的交互。内容涵盖项目依赖配置、异步非阻塞的API调用、请求与响应的结构化处理、异常管理以及一些面向生产环境的最佳实践,并附带完整的代码示例,助您快速将AI能力融入Java生态。
985 12
|
6月前
|
Java 开发者
Java并发编程:CountDownLatch实战解析
Java并发编程:CountDownLatch实战解析
542 100
|
6月前
|
存储 前端开发 Java
【JAVA】Java 项目实战之 Java Web 在线商城项目开发实战指南
本文介绍基于Java Web的在线商城技术方案与实现,涵盖三层架构设计、MySQL数据库建模及核心功能开发。通过Spring MVC + MyBatis + Thymeleaf实现商品展示、购物车等模块,提供完整代码示例,助力掌握Java Web项目实战技能。(238字)
749 0
|
5月前
|
JSON 网络协议 安全
【Java】(10)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
275 2
|
5月前
|
JSON 网络协议 安全
【Java基础】(1)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
295 3
|
6月前
|
数据采集 存储 弹性计算
高并发Java爬虫的瓶颈分析与动态线程优化方案
高并发Java爬虫的瓶颈分析与动态线程优化方案