Modify array by removing (arr[i] + arr[i + 1])th element exactly K times
Given an array arr[] consisting of first N natural numbers, where arr[i] = i ( 1-based indexing ) and a positive integer K, the task is to print the array arr[] obtained after removing every (arr[i] + arr[i + 1])th element from the array in every ith operation exactly K times.
Examples:
Input: arr[] = {1, 2, 3, 4, 5, 6, 7, 8}, K = 2
Output: 1 2 4 5 7
Explanation:
Initially, the array arr[] is {1, 2, 3, 4, 5, 6, 7, 8}.
Operation 1: Delete every (A[1] + A[2])th element, i.e., every 3rd element from the array arr[]. Now the array modifies to {1, 2, 4, 5, 7, 8}.
Operation 2: Delete every (A[2] + A[3])th element, i.e., every 6th element from the array arr[]. Now the array modifies to {1, 2, 4, 5, 7}.
After performing the above operations, the array obtained is {1, 2, 4, 5, 7}.
Input: N = 10, K = 3
Output: 1 2 4 5 7 10
Approach: The given problem can be solved by performing the given operation exactly K times by deleting every (arr[i] + arr[i + 1])th term from the array in every ith operation. Follow the steps below to solve the problem:
- Iterate over the range [0, K – 1] using the variable i, and perform the following steps:
- Initialize an auxiliary array B[] to stores the elements of the array arr[] after each deletion operation.
- Traverse the given array arr[] and if the current index is not divisible by the value (arr[i] + arr[i + 1]) then insert that element in the array B[].
- After the above steps, insert all the elements of the array B[] in the array arr[].
- After completing the above steps, print the array arr[] as the resultant array.
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
vector< int > removeEveryKth(vector< int > l, int k)
{
for ( int i = 0; i < l.size(); i++)
{
if (i % k == 0)
l[i] = 0;
}
vector< int > arr;
arr.push_back(0);
for ( int i = 1; i < l.size(); i++)
{
if (l[i] != 0)
arr.push_back(l[i]);
}
return arr;
}
void printArray(vector< int > l)
{
for ( int i = 1; i < l.size(); i++)
cout << l[i] << " " ;
cout << endl;
}
void printSequence( int n, int k)
{
vector< int > l(n+1);
for ( int i = 0; i < n + 1; i++) l[i]=i;
int x = 1;
for ( int i = 0; i < k; i++)
{
int p = l[x] + l[x + 1];
l = removeEveryKth(l, p);
x += 1;
}
printArray(l);
}
int main()
{
int N = 8;
int K = 2;
printSequence(N, K);
}
|
Java
import java.io.*;
import java.lang.*;
import java.util.*;
public class GFG {
static int [] removeEveryKth( int l[], int k)
{
for ( int i = 0 ; i < l.length; i++) {
if (i % k == 0 )
l[i] = 0 ;
}
ArrayList<Integer> list = new ArrayList<>();
list.add( 0 );
for ( int i = 1 ; i < l.length; i++) {
if (l[i] != 0 )
list.add(l[i]);
}
return list.stream().mapToInt(i -> i).toArray();
}
static void printArray( int l[])
{
for ( int i = 1 ; i < l.length; i++)
System.out.print(l[i] + " " );
System.out.println();
}
static void printSequence( int n, int k)
{
int l[] = new int [n + 1 ];
for ( int i = 0 ; i < n + 1 ; i++)
l[i] = i;
int x = 1 ;
for ( int i = 0 ; i < k; i++) {
int p = l[x] + l[x + 1 ];
l = removeEveryKth(l, p);
x += 1 ;
}
printArray(l);
}
public static void main(String[] args)
{
int N = 8 ;
int K = 2 ;
printSequence(N, K);
}
}
|
Python3
def removeEveryKth(l, k):
for i in range ( 0 , len (l)):
if i % k = = 0 :
l[i] = 0
arr = [ 0 ]
for i in range ( 1 , len (l)):
if l[i] ! = 0 :
arr.append(l[i])
return arr
def printArray(l):
for i in range ( 1 , len (l)):
print (l[i], end = " " )
print ()
def printSequence(n, k):
l = [ int (i) for i in range ( 0 , n + 1 )]
x = 1
for i in range ( 0 , k):
p = l[x] + l[x + 1 ]
l = removeEveryKth(l, p)
x + = 1
printArray(l)
N = 8
K = 2
printSequence(N, K)
|
C#
using System;
using System.Collections.Generic;
class GFG {
static List< int > removeEveryKth(List< int > l, int k)
{
for ( int i = 0; i < l.Count; i++) {
if (i % k == 0)
l[i] = 0;
}
List< int > arr = new List< int >();
arr.Add(0);
for ( int i = 1; i < l.Count; i++) {
if (l[i] != 0)
arr.Add(l[i]);
}
return arr;
}
static void printArray(List< int > l)
{
for ( int i = 1; i < l.Count; i++)
Console.Write(l[i] + " " );
Console.WriteLine();
}
static void printSequence( int n, int k)
{
List< int > l = new List< int >();
for ( int i = 0; i < n + 1; i++)
l.Add(i);
int x = 1;
for ( int i = 0; i < k; i++) {
int p = l[x] + l[x + 1];
l = removeEveryKth(l, p);
x += 1;
}
printArray(l);
}
public static void Main()
{
int N = 8;
int K = 2;
printSequence(N, K);
}
}
|
Javascript
<script>
function removeEveryKth(l, k) {
for (let i = 0; i < l.length; i++) {
if (i % k == 0)
l[i] = 0;
}
let arr = [0];
for (let i = 1; i < l.length; i++) {
if (l[i] != 0)
arr.push(l[i]);
}
return arr;
}
function printArray(l) {
for (let i = 1; i < l.length; i++)
document.write(l[i] + " " );
}
function printSequence(n, k) {
let l = [0];
for (let i = 0; i < n + 1; i++) l[i] = i;
let x = 1;
for (let i = 0; i < k; i++) {
let p = l[x] + l[x + 1];
l = removeEveryKth(l, p);
x += 1;
}
printArray(l);
}
let N = 8;
let K = 2;
printSequence(N, K);
</script>
|
Time Complexity: O(N*K)
Auxiliary Space: O(N)
Last Updated :
14 May, 2021
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...