Find The Longest Sub-Array With Switching Elements

An array with a length greater than 1 will be called a switching array if the element present at the odd position and the element present at an even position is equal.

For Example

[2,4,2,4] is a switching array because the element is present at even positions ie 0th position is 2 and 2nd position is 2 are equal, elements at odd positions ie 1st position is 4 and 3rd position is 4 are equal.

[3,7,3,7, 2, 1, 2] is not a switching array but has a switching subarray [3,7,3,7] of length 4 and [2, 1, 2] of length 3, hence the longest switching sub-array is [3,7,3,7] with length 4.

[1,5,6,0,1,0] is not a switching array but has a switching subarray [0,1,0] with length 3.

[7,-5,-5,-5,7,-1,7] is not a switching array but has a switching subarray [7,-1,7] of length 3 and [-5,-5,-5] of length 3.

package org.wesome.dsalgo;

public class SwitchingArray {
    public static int switchingArray(int[] arr) {
        if (arr.length == 1) {
            return 1;
        }
        int even = arr[0], odd = arr[1];
        int start = 0, max_len = 0;
        for (int indx = 2; indx < arr.length; ++indx) {
            System.out.println((indx + " % 2 != 0 " + (indx % 2 != 0) + " or " + (arr[indx] + " is even ") + (arr[indx] == even) + " and" + (" indx % 2 != 1 ") + (indx % 2 != 1) + ", " + (arr[indx] + " == odd ") + (arr[indx] == odd)));
            if ((indx % 2 != 0 || arr[indx] == even) && (indx % 2 != 1 || arr[indx] == odd)) {
                /*  if condition is true then skip this iteration   */
                System.out.println("hence skip this iteration");
                continue;
            }
            max_len = Math.max(max_len, indx - start);
            start = indx - 1;
            if (indx % 2 == 0) {
                even = arr[indx];
                odd = arr[indx - 1];
            } else {
                even = arr[indx - 1];
                odd = arr[indx];
            }
        }
        return Math.max(max_len, arr.length - start);
    }
}
package org.wesome.dsalgo;

import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;


public class SwitchingArrayTest {
    @Test
    void switchingArrayTest1() {
        int[] arr = new int[]{3, 2, 3, 2, 3};
        Assertions.assertEquals(5, SwitchingArray.switchingArray(arr));
    }

    @Test
    void switchingArrayTest2() {
        int[] arr = new int[]{3, 7, 3, 7, 2, 1, 2};
        Assertions.assertEquals(4, SwitchingArray.switchingArray(arr));
    }

    @Test
    void switchingArrayTest3() {
        int[] arr = new int[]{1, 5, 6, 0, 1, 0};
        Assertions.assertEquals(3, SwitchingArray.switchingArray(arr));
    }

    @Test
    void switchingArrayTest4() {
        int[] arr = new int[]{7, -5, -5, -5, 7, -1, 7};
        Assertions.assertEquals(3, SwitchingArray.switchingArray(arr));
    }
}
plugins {
    id 'java'
    id "io.freefair.lombok" version "6.2.0"
}

group = 'org.wesome'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = JavaVersion.VERSION_1_8

configurations {
    compileOnly {
        extendsFrom annotationProcessor
    }
}

repositories {
    mavenCentral()
}

dependencies {
    testImplementation 'org.junit.jupiter:junit-jupiter:5.6.2'
}

test {
    useJUnitPlatform()
}

 

follow us on