给定一个整数数组,将每个元素替换为上一个元素和下一个元素的异或,以下例外。
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