In this HackerRank Zig Zag Sequence problem solution, the task is to debug the existing code to successfully execute all provided test files.
Given an array of n distinct integers, transform the array into a zig-zag sequence by permuting the array elements. A sequence will be called a zig-zag sequence if the first k elements in the sequence are in increasing order and the last k elements are in decreasing order, where k = (n + 1)/2. You need to find the lexicographically smallest zig-zag sequence of the given array.
Problem solution in Python.
def findZigZagSequence(a, n): a.sort() mid = int(n / 2) a[mid], a[n-1] = a[n-1], a[mid] st = mid + 1 ed = n - 2 while(st <= ed): a[st], a[ed] = a[ed], a[st] st = st + 1 ed = ed - 1 for i in range (n): if i == n-1: print(a[i]) else: print(a[i], end = ' ') return test_cases = int(input()) for cs in range (test_cases): n = int(input()) a = list(map(int, input().split())) findZigZagSequence(a, n)
Problem solution in Java.
import java.util.*; import java.lang.*; import java.io.*; import java.math.*; public class Main { public static void main (String[] args) throws java.lang.Exception { Scanner kb = new Scanner(System.in); int test_cases = kb.nextInt(); for(int cs = 1; cs <= test_cases; cs++){ int n = kb.nextInt(); int a[] = new int[n]; for(int i = 0; i < n; i++){ a[i] = kb.nextInt(); } findZigZagSequence(a, n); } } public static void findZigZagSequence(int [] a, int n){ Arrays.sort(a); int mid = n/2; int temp = a[mid]; a[mid] = a[n - 1]; a[n - 1] = temp; int st = mid + 1; int ed = n - 2; while(st <= ed){ temp = a[st]; a[st] = a[ed]; a[ed] = temp; st = st + 1; ed = ed - 1; } for(int i = 0; i < n; i++){ if(i > 0) System.out.print(" "); System.out.print(a[i]); } System.out.println(); } }
Problem solution in C++.
#include <bits/stdc++.h> using namespace std; void findZigZagSequence(vector < int > a, int n){ sort(a.begin(), a.end()); int mid = (n + 1)/2 - 1; //change 1 swap(a[mid], a[n-1]); int st = mid + 1; int ed = n - 2; //change 2 while(st <= ed){ swap(a[st], a[ed]); st = st + 1; ed = ed - 1; //change 3 } for(int i = 0; i < n; i++){ if(i > 0) cout << " "; cout << a[i]; } cout << endl; } int main() { int n, x; int test_cases; cin >> test_cases; for(int cs = 1; cs <= test_cases; cs++){ cin >> n; vector < int > a; for(int i = 0; i < n; i++){ cin >> x; a.push_back(x); } findZigZagSequence(a, n); } }