📌  相关文章
📜  用上一个和下一个元素的按位Xor替换每个数组元素

📅  最后修改于: 2021-04-22 00:12:28             🧑  作者: Mango

给定一个整数数组,将每个元素替换为上一个元素和下一个元素的异或,以下例外。
a)将第一个元素替换为第一和第二个元素的和。
b)最后一个元素被倒数第二个和倒数第二个的和所代替。
例子:

Input: arr[] = { 2, 3, 4, 5, 6}
Output: 1 6 6 2 3 

We get the following array as {2^3, 2^4, 3^5, 4^6, 5^6}

Input: arr[] = { 1, 2, 1, 5}
Output: 3, 0, 7, 4

We get the following array as {1^2, 1^1, 2^5, 1^5}

一个简单的解决方案是创建一个辅助数组,将给定数组的内容复制到辅助数组。最后遍历辅助数组并使用复制的值更新给定的数组。此解决方案的时间复杂度为O(n),但需要O(n)额外空间。
一个有效的解决方案可以解决O(n)时间和O(1)空间中的问题。这个想法是要跟踪循环中的前一个元素。使用extra变量将上一个元素与下一个元素进行异或,以获取每个元素。
下面是上述方法的实现:

C++
// C++ program to update every array element with
// sum of previous and next numbers in array
#include 
using namespace std;
 
void ReplaceElements(int arr[], int n)
{
    // Nothing to do when array size is 1
    if (n <= 1)
        return;
 
    // store current value of arr[0] and update it
    int prev = arr[0];
    arr[0] = arr[0] ^ arr[1];
 
    // Update rest of the array elements
    for (int i = 1; i < n - 1; i++) {
        // Store current value of next interation
        int curr = arr[i];
 
        // Update current value using previos value
        arr[i] = prev ^ arr[i + 1];
 
        // Update previous value
        prev = curr;
    }
 
    // Update last array element separately
    arr[n - 1] = prev ^ arr[n - 1];
}
 
// Driver program
int main()
{
    int arr[] = { 2, 3, 4, 5, 6 };
    int n = sizeof(arr) / sizeof(arr[0]);
 
    ReplaceElements(arr, n);
 
    // Print the modified array
    for (int i = 0; i < n; i++)
        cout << arr[i] << " ";
    return 0;
}


Java
// Java  program to update every array
// element with sum of previous and
// next numbers in array
import  java .io.*;
 
class GFG
{
static void ReplaceElements(int[] arr,
                            int n)
{
    // Nothing to do when array size is 1
    if (n <= 1)
        return;
 
    // store current value of arr[0]
    // and update it
    int prev = arr[0];
    arr[0] = arr[0] ^ arr[1];
 
    // Update rest of the array elements
    for (int i = 1; i < n - 1; i++)
    {
        // Store current value of
        // next interation
        int curr = arr[i];
 
        // Update current value using
        // previous value
        arr[i] = prev ^ arr[i + 1];
 
        // Update previous value
        prev = curr;
    }
 
    // Update last array element separately
    arr[n - 1] = prev ^ arr[n - 1];
}
 
// Driver Code
public static void main(String[] args)
 
{
    int[] arr = { 2, 3, 4, 5, 6 };
    int n = arr.length;
 
    ReplaceElements(arr, n);
 
    // Print the modified array
    for (int i = 0; i < n; i++)
        System.out.print(arr[i] + " ");
}
}
 
// This code is contributed
// by anuj_67..


Python3
# Python3 program to update every
# array element with sum of previous
# and next numbers in array
def ReplaceElements(arr, n):
 
    # Nothing to do when array
    # size is 1
    if n <= 1:
        return
 
    # store current value of arr[0]
    # and update it
    prev = arr[0]
    arr[0] = arr[0] ^ arr[1]
 
    # Update rest of the array elements
    for i in range(1, n - 1):
 
        # Store current value of
        # next interation
        curr = arr[i]
         
        # Update current value using
        # previos value
        arr[i] = prev ^ arr[i + 1]
         
        # Update previous value
        prev = curr
     
    # Update last array element separately
    arr[n - 1] = prev ^ arr[n - 1]
 
# Driver Code
arr = [2, 3, 4, 5, 6]
n = len(arr)
ReplaceElements(arr, n)
for i in range(n):
    print(arr[i], end = " ")
 
# This code is contributed
# by Shrikant13


C#
// C# program to update every array
// element with sum of previous and
// next numbers in array
using System;
 
class GFG
{
static void ReplaceElements(int[] arr,
                            int n)
{
    // Nothing to do when array size is 1
    if (n <= 1)
        return;
 
    // store current value of arr[0]
    // and update it
    int prev = arr[0];
    arr[0] = arr[0] ^ arr[1];
 
    // Update rest of the array elements
    for (int i = 1; i < n - 1; i++)
    {
        // Store current value of
        // next interation
        int curr = arr[i];
 
        // Update current value using
        // previous value
        arr[i] = prev ^ arr[i + 1];
 
        // Update previous value
        prev = curr;
    }
 
    // Update last array element separately
    arr[n - 1] = prev ^ arr[n - 1];
}
 
// Driver Code
public static void Main()
{
    int[] arr = { 2, 3, 4, 5, 6 };
    int n = arr.Length;
 
    ReplaceElements(arr, n);
 
    // Print the modified array
    for (int i = 0; i < n; i++)
        Console.Write(arr[i] + " ");
}
}
 
// This code is contributed
// by Akanskha Rai(Abby_akku)


PHP


C++
// C++ program to update every array element with
// sum of previous and next numbers in array
#include 
using namespace std;
 
void ReplaceElements(int arr[], int n)
{
    // Nothing to do when array size is 1
    if (n <= 1)
        return;
 
    // store current value of arr[0] and update it
    int prev = arr[0];
    arr[0] = arr[0] ^ arr[1];
 
    // Update rest of the array elements
    for (int i = 1; i < n - 1; i++) {
        // Store current value of next interation
        int curr = arr[i];
 
        // Update current value using previous value
        arr[i] = prev ^ arr[i + 1];
 
        // Update previous value
        prev = curr;
    }
 
    // Update last array element separately
    arr[n - 1] = prev ^ arr[n - 1];
}
 
// Driver program
int main()
{
    int arr[] = { 2, 3, 4, 5, 6 };
    int n = sizeof(arr) / sizeof(arr[0]);
 
    ReplaceElements(arr, n);
 
    // Print the modified array
    for (int i = 0; i < n; i++)
        cout << arr[i] << " ";
    return 0;
}


Java
// Java  program to update every array
// element with sum of previous and
// next numbers in array
import  java .io.*;
 
class GFG
{
static void ReplaceElements(int[] arr,
                            int n)
{
    // Nothing to do when array size is 1
    if (n <= 1)
        return;
 
    // store current value of arr[0]
    // and update it
    int prev = arr[0];
    arr[0] = arr[0] ^ arr[1];
 
    // Update rest of the array elements
    for (int i = 1; i < n - 1; i++)
    {
        // Store current value of
        // next interation
        int curr = arr[i];
 
        // Update current value using
        // previous value
        arr[i] = prev ^ arr[i + 1];
 
        // Update previous value
        prev = curr;
    }
 
    // Update last array element separately
    arr[n - 1] = prev ^ arr[n - 1];
}
 
// Driver Code
public static void main(String[] args)
 
{
    int[] arr = { 2, 3, 4, 5, 6 };
    int n = arr.length;
 
    ReplaceElements(arr, n);
 
    // Print the modified array
    for (int i = 0; i < n; i++)
        System.out.print(arr[i] + " ");
}
}
 
// This code is contributed
// by anuj_67..


Python3
# Python3 program to update every
# array element with sum of previous
# and next numbers in array
def ReplaceElements(arr, n):
 
    # Nothing to do when array
    # size is 1
    if n <= 1:
        return
 
    # store current value of arr[0]
    # and update it
    prev = arr[0]
    arr[0] = arr[0] ^ arr[1]
 
    # Update rest of the array elements
    for i in range(1, n - 1):
 
        # Store current value of
        # next interation
        curr = arr[i]
         
        # Update current value using
        # previos value
        arr[i] = prev ^ arr[i + 1]
         
        # Update previous value
        prev = curr
     
    # Update last array element separately
    arr[n - 1] = prev ^ arr[n - 1]
 
# Driver Code
arr = [2, 3, 4, 5, 6]
n = len(arr)
ReplaceElements(arr, n)
for i in range(n):
    print(arr[i], end = " ")
 
# This code is contributed
# by Shrikant13


C#
// C# program to update every array
// element with sum of previous and
// next numbers in array
using System;
 
class GFG
{
static void ReplaceElements(int[] arr,
                            int n)
{
    // Nothing to do when array size is 1
    if (n <= 1)
        return;
 
    // store current value of arr[0]
    // and update it
    int prev = arr[0];
    arr[0] = arr[0] ^ arr[1];
 
    // Update rest of the array elements
    for (int i = 1; i < n - 1; i++)
    {
        // Store current value of
        // next interation
        int curr = arr[i];
 
        // Update current value using
        // previous value
        arr[i] = prev ^ arr[i + 1];
 
        // Update previous value
        prev = curr;
    }
 
    // Update last array element separately
    arr[n - 1] = prev ^ arr[n - 1];
}
 
// Driver Code
public static void Main()
{
    int[] arr = { 2, 3, 4, 5, 6 };
    int n = arr.Length;
 
    ReplaceElements(arr, n);
 
    // Print the modified array
    for (int i = 0; i < n; i++)
        Console.Write(arr[i] + " ");
}
}
 
// This code is contributed
// by Akanskha Rai(Abby_akku)


PHP


输出:
1 6 6 2 3

ü

C++

// C++ program to update every array element with
// sum of previous and next numbers in array
#include 
using namespace std;
 
void ReplaceElements(int arr[], int n)
{
    // Nothing to do when array size is 1
    if (n <= 1)
        return;
 
    // store current value of arr[0] and update it
    int prev = arr[0];
    arr[0] = arr[0] ^ arr[1];
 
    // Update rest of the array elements
    for (int i = 1; i < n - 1; i++) {
        // Store current value of next interation
        int curr = arr[i];
 
        // Update current value using previous value
        arr[i] = prev ^ arr[i + 1];
 
        // Update previous value
        prev = curr;
    }
 
    // Update last array element separately
    arr[n - 1] = prev ^ arr[n - 1];
}
 
// Driver program
int main()
{
    int arr[] = { 2, 3, 4, 5, 6 };
    int n = sizeof(arr) / sizeof(arr[0]);
 
    ReplaceElements(arr, n);
 
    // Print the modified array
    for (int i = 0; i < n; i++)
        cout << arr[i] << " ";
    return 0;
}

Java

// Java  program to update every array
// element with sum of previous and
// next numbers in array
import  java .io.*;
 
class GFG
{
static void ReplaceElements(int[] arr,
                            int n)
{
    // Nothing to do when array size is 1
    if (n <= 1)
        return;
 
    // store current value of arr[0]
    // and update it
    int prev = arr[0];
    arr[0] = arr[0] ^ arr[1];
 
    // Update rest of the array elements
    for (int i = 1; i < n - 1; i++)
    {
        // Store current value of
        // next interation
        int curr = arr[i];
 
        // Update current value using
        // previous value
        arr[i] = prev ^ arr[i + 1];
 
        // Update previous value
        prev = curr;
    }
 
    // Update last array element separately
    arr[n - 1] = prev ^ arr[n - 1];
}
 
// Driver Code
public static void main(String[] args)
 
{
    int[] arr = { 2, 3, 4, 5, 6 };
    int n = arr.length;
 
    ReplaceElements(arr, n);
 
    // Print the modified array
    for (int i = 0; i < n; i++)
        System.out.print(arr[i] + " ");
}
}
 
// This code is contributed
// by anuj_67..

Python3

# Python3 program to update every
# array element with sum of previous
# and next numbers in array
def ReplaceElements(arr, n):
 
    # Nothing to do when array
    # size is 1
    if n <= 1:
        return
 
    # store current value of arr[0]
    # and update it
    prev = arr[0]
    arr[0] = arr[0] ^ arr[1]
 
    # Update rest of the array elements
    for i in range(1, n - 1):
 
        # Store current value of
        # next interation
        curr = arr[i]
         
        # Update current value using
        # previos value
        arr[i] = prev ^ arr[i + 1]
         
        # Update previous value
        prev = curr
     
    # Update last array element separately
    arr[n - 1] = prev ^ arr[n - 1]
 
# Driver Code
arr = [2, 3, 4, 5, 6]
n = len(arr)
ReplaceElements(arr, n)
for i in range(n):
    print(arr[i], end = " ")
 
# This code is contributed
# by Shrikant13

C#

// C# program to update every array
// element with sum of previous and
// next numbers in array
using System;
 
class GFG
{
static void ReplaceElements(int[] arr,
                            int n)
{
    // Nothing to do when array size is 1
    if (n <= 1)
        return;
 
    // store current value of arr[0]
    // and update it
    int prev = arr[0];
    arr[0] = arr[0] ^ arr[1];
 
    // Update rest of the array elements
    for (int i = 1; i < n - 1; i++)
    {
        // Store current value of
        // next interation
        int curr = arr[i];
 
        // Update current value using
        // previous value
        arr[i] = prev ^ arr[i + 1];
 
        // Update previous value
        prev = curr;
    }
 
    // Update last array element separately
    arr[n - 1] = prev ^ arr[n - 1];
}
 
// Driver Code
public static void Main()
{
    int[] arr = { 2, 3, 4, 5, 6 };
    int n = arr.Length;
 
    ReplaceElements(arr, n);
 
    // Print the modified array
    for (int i = 0; i < n; i++)
        Console.Write(arr[i] + " ");
}
}
 
// This code is contributed
// by Akanskha Rai(Abby_akku)

的PHP