热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

求大小为k的子阵列的最大异或值

求大小为k的子阵列的最大异或值原文:https://www

求大小为 k 的子阵列的最大异或值

原文:https://www . geesforgeks . org/find-maximum-xor-value-sub-array-size-k/

给定一个整数数组,任务是找到大小为 k 的子数组的最大异或值。
示例:

Input : arr[] = {2, 5, 8 ,1 , 1 ,3} k = 3
Output : 15
Explanation : All subarrays of size k (=3) and
their XOR values are:
{2, 5, 8} => XOR value = 15
{5, 8, 1} => XOR value = 12
{8, 1, 1} => XOR value = 8
{1, 1, 3} => XOR value = 3
Maximum of all XOR values = 15
Input : arr[] = {1, 2, 4, 5, 6}
Output : 6

一个简单的解决方案是将 k 大小的所有子阵逐一考虑,计算 XOR 值。最后返回所有异或值的最大值。该解决方案需要 0(n * k)时间
高效解决方案需要 0(n)时间。思路很简单,通过去掉前一个子阵的第一个元素,加上当前子阵的最后一个元素,就可以求出 k 大小的当前子阵的 XOR 值。我们可以通过再次对一个元素进行异或运算来从当前 XOR 中移除该元素,因为 XOR 的属性是 a ^ x ^ x = a。
算法:

Let input array be 'arr[]' and size of array be 'n'
max_xor ; // user to store maximum xor value
current_xor; // user to store xor value of current subarray
// of size k
// First compute xor value of first subarray of size k
// (i goes from 0 to k)
corrent_xor = current_xor ^ arr[i]
// Initialize maximum XOR
max_xor = current_xor
Traversal rest array (i goes from k to n-1 )
a). remove first element of previous subarray
current_xor = current_xor ^ arr[i-k]
b). add new element to subarray
current_xor = current_xor ^ arr[i]
c). update max_xor = max(max_xor, current_xor)
return max_xor

下面是以上步骤的实现。

C++


// C++/C program to find maximum xor value of subarray of
// size k
#include<iostream>
using namespace std;
// Returns maximum XOR value of subarray of size k
int maximumXOR(int arr[] , int n , int k)
{
    // Compute XOR value of first subarray of size k
    int current_xor = 0 ;
    for (int i = 0 ; i < k ; i++)
        current_xor  = current_xor ^ arr[i];
    // Traverse rest of the array
    int max_xor = current_xor;
    for (int i = k ; i < n; i++)
    {
        // First remove previous subarray's first
        // element
        current_xor = current_xor ^ arr[i-k];
        // add new element
        current_xor = current_xor ^ arr[i];
        // Update maximum xor value
        max_xor = max(max_xor, current_xor);
    }
    return max_xor;
}
// Driver program
int main()
{
    int arr[] = {2, 5, 8 ,1 , 1 ,3} ;
    int k = 3;
    int n = sizeof(arr)/sizeof(arr[0]);
    cout << "Maximum XOR : " << maximumXOR(arr, n, k);
    return 0;
}


Java 语言(一种计算机语言,尤用于创建网站)


// Java program to find maximum xor value of
// subarray of size k
import java.io.*;
class GFG {
    // Returns maximum XOR value of subarray of size k
    static int maximumXOR(int arr[] , int n , int k)
    {
        // Compute XOR value of first subarray of size k
        int current_xor = 0 ;
        for (int i = 0 ; i < k ; i++)
            current_xor = current_xor ^ arr[i];
        // Traverse rest of the array
        int max_xor = current_xor;
        for (int i = k ; i < n; i++)
        {
            // First remove previous subarray's first
            // element
            current_xor = current_xor ^ arr[i-k];
            // add new element
            current_xor = current_xor ^ arr[i];
            // Update maximum xor value
            max_xor = Math.max(max_xor, current_xor);
        }
        return max_xor;
    }
    // Driver program
    public static void main (String[] args)
    {
        int arr[] = {2, 5, 8 ,1 , 1 ,3} ;
        int k = 3;
        int n = arr.length;
        System.out.println( "Maximum XOR : "
                   + maximumXOR(arr, n, k));
    }
}
// This code is contributed by anuj_67.


Python 3


# Python3 program to find maximum
# xor value of subarray of
# size
# Returns maximum XOR value
# of subarray of size k
def maximumXOR(arr , n , k):
    # Compute XOR value of first
    # subarray of size k
    current_xor = 0
    for i in range ( k):
        current_xor = current_xor ^ arr[i]
    # Traverse rest of the array
    max_xor = current_xor
    for i in range( k,n):
        # First remove previous subarray's first
        # element
        current_xor = current_xor ^ arr[i-k]
        # add new element
        current_xor = current_xor ^ arr[i]
        # Update maximum xor value
        max_xor = max(max_xor, current_xor)
    return max_xor
# Driver program
if __name__ =="__main__":
    arr = [2, 5, 8 ,1 , 1 ,3]
    k = 3
    n = len(arr)
    print ("Maximum XOR : "
          ,maximumXOR(arr, n, k))
# This code is contributed by
# ChitraNayal


C


// C# program to find maximum
// xor value of subarray of
// size k
using System;
class GFG {
    // Returns maximum XOR value
    // of subarray of size k
    static int maximumXOR(int []arr,
                      int n, int k)
    {
        // Compute XOR value of first
        // subarray of size k
        int current_xor = 0 ;
        for (int i = 0; i < k; i++)
            current_xor = current_xor ^ arr[i];
        // Traverse rest of the array
        int max_xor = current_xor;
        for (int i = k ; i < n; i++)
        {
            // First remove previous
            // subarray's first
            // element
            current_xor = current_xor ^ arr[i-k];
            // add new element
            current_xor = current_xor ^ arr[i];
            // Update maximum xor value
            max_xor = Math.Max(max_xor, current_xor);
        }
        return max_xor;
    }
    // Driver Code
    public static void Main ()
    {
        int []arr = {2, 5, 8 ,1 , 1 ,3} ;
        int k = 3;
        int n = arr.Length;
        Console.WriteLine("Maximum XOR : "
                  + maximumXOR(arr, n, k));
    }
}
// This code is contributed by anuj_67.


服务器端编程语言(Professional Hypertext Preprocessor 的缩写)



// PHP program to find maximum
// xor value of subarray of size k
// Returns maximum XOR value
// of subarray of size k
function maximumXOR($arr, $n, $k)
{
    // Compute XOR value of
    // first subarray of size k
    $current_xor = 0 ;
    for ($i = 0 ; $i < $k ; $i++)
        $current_xor = $current_xor ^
                       $arr[$i];
    // Traverse rest of the array
    $max_xor = $current_xor;
    for ($i = $k ; $i < $n; $i++)
    {
        // First remove previous
        // subarray's first element
        $current_xor = $current_xor ^
                       $arr[$i - $k];
        // add new element
        $current_xor = $current_xor ^
                       $arr[$i];
        // Update maximum xor value
        $max_xor = max($max_xor,
                       $current_xor);
    }
    return $max_xor;
}
// Driver Code
$arr = array(2, 5, 8, 1, 1, 3) ;
$k = 3;
$n = sizeof($arr);
echo "Maximum XOR : ",
      maximumXOR($arr, $n, $k);
// This code is contributed by m_kit
?>


java 描述语言


<script>
// Javascript program to find maximum xor value of
// subarray of size k
    // Returns maximum XOR value of subarray of size k   
    function maximumXOR(arr,n,k)
    {
        // Compute XOR value of first subarray of size k
        let current_xor = 0 ;
        for (let i = 0 ; i < k ; i++)
            current_xor = current_xor ^ arr[i];
        // Traverse rest of the array
        let max_xor = current_xor;
        for (let i = k ; i < n; i++)
        {
            // First remove previous subarray's first
            // element
            current_xor = current_xor ^ arr[i-k];
            // add new element
            current_xor = current_xor ^ arr[i];
            // Update maximum xor value
            max_xor = Math.max(max_xor, current_xor);
        }
        return max_xor;
    }
    // Driver program
    let arr=[2, 5, 8 ,1 , 1 ,3];
    let k = 3;
    let  n = arr.length;
    document.write( "Maximum XOR : "
                   + maximumXOR(arr, n, k));
    // This code is contributed by rag2127
script>

输出:

Maximum XOR : 15

时间复杂度: O(n)
本文由 Nishant_Singh(Pintu) 供稿。如果你喜欢 GeeksforGeeks 并想投稿,你也可以使用write.geeksforgeeks.org写一篇文章或者把你的文章邮寄到 review-team@geeksforgeeks.org。看到你的文章出现在极客博客主页上,帮助其他极客。
如果发现有不正确的地方,或者想分享更多关于上述话题的信息,请写评论。


推荐阅读
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • 本文介绍了UVALive6575题目Odd and Even Zeroes的解法,使用了数位dp和找规律的方法。阶乘的定义和性质被介绍,并给出了一些例子。其中,部分阶乘的尾零个数为奇数,部分为偶数。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • Android源码深入理解JNI技术的概述和应用
    本文介绍了Android源码中的JNI技术,包括概述和应用。JNI是Java Native Interface的缩写,是一种技术,可以实现Java程序调用Native语言写的函数,以及Native程序调用Java层的函数。在Android平台上,JNI充当了连接Java世界和Native世界的桥梁。本文通过分析Android源码中的相关文件和位置,深入探讨了JNI技术在Android开发中的重要性和应用场景。 ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • 3.223.28周学习总结中的贪心作业收获及困惑
    本文是对3.223.28周学习总结中的贪心作业进行总结,作者在解题过程中参考了他人的代码,但前提是要先理解题目并有解题思路。作者分享了自己在贪心作业中的收获,同时提到了一道让他困惑的题目,即input details部分引发的疑惑。 ... [详细]
  • 学习Java异常处理之throws之抛出并捕获异常(9)
    任务描述本关任务:在main方法之外创建任意一个方法接收给定的两个字符串,把第二个字符串的长度减1生成一个整数值,输出第一个字符串长度是 ... [详细]
  • 本文介绍了在iOS开发中使用UITextField实现字符限制的方法,包括利用代理方法和使用BNTextField-Limit库的实现策略。通过这些方法,开发者可以方便地限制UITextField的字符个数和输入规则。 ... [详细]
  • 动态规划算法的基本步骤及最长递增子序列问题详解
    本文详细介绍了动态规划算法的基本步骤,包括划分阶段、选择状态、决策和状态转移方程,并以最长递增子序列问题为例进行了详细解析。动态规划算法的有效性依赖于问题本身所具有的最优子结构性质和子问题重叠性质。通过将子问题的解保存在一个表中,在以后尽可能多地利用这些子问题的解,从而提高算法的效率。 ... [详细]
  • C++字符字符串处理及字符集编码方案
    本文介绍了C++中字符字符串处理的问题,并详细解释了字符集编码方案,包括UNICODE、Windows apps采用的UTF-16编码、ASCII、SBCS和DBCS编码方案。同时说明了ANSI C标准和Windows中的字符/字符串数据类型实现。文章还提到了在编译时需要定义UNICODE宏以支持unicode编码,否则将使用windows code page编译。最后,给出了相关的头文件和数据类型定义。 ... [详细]
  • SpringBoot整合SpringSecurity+JWT实现单点登录
    SpringBoot整合SpringSecurity+JWT实现单点登录,Go语言社区,Golang程序员人脉社 ... [详细]
author-avatar
手机用户2502905845
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有