Detect Alternating Pattern

Code

#include <stdio.h>

// int is_alternating_pattern(int *mem, int k,int n) {
//     // Write your pointer logic here
//     // int yes = 1;
//     // int *p = *mem;
//     for (int i=0;i<n-k+1;i++){
//         if (*(mem + i) == *(mem + i + 1)){
//             return 0;
//         }
//     }
//     return 1;
// }
int is_alternating_pattern(const int *mem, int k, int n) {
    // Basic validation
    if (k <= 0 || k > n) return 0;   // invalid segment
    if (k == 1) return 1;            // a single element is trivially alternating

    const int *p = mem;
    int A = *p;         // first value
    int B = *(p + 1);   // second value

    if (A == B) return 0; // must be two distinct values to alternate

    // Walk through the first k elements verifying A,B,A,B,...
    for (int i = 0; i < k; ++i, ++p) {
        if ((i & 1) == 0) {          // even index → expect A
            if (*p != A) return 0;
        } else {                     // odd index → expect B
            if (*p != B) return 0;
        }
    }
    return 1;
}

int main() {
    int n, k, arr[100];
    scanf("%d %d", &n, &k);

    for (int i = 0; i < n; i++) {
        scanf("%d", &arr[i]);
    }

    int res = is_alternating_pattern(arr, k,n);
    printf("%d", res);

    return 0;
}

Solving Approach

 

 

 

Upvote
Downvote
Loading...

Input

6 6 1 0 1 0 1 0

Expected Output

1