First Negative In Every Window

Moderate
0/80
Average time to solve is 15m
profile
Contributed by
55 upvotes
Asked in company
Amazon

Problem statement

You have been given an array of integers 'ARR' of size 'N'. You are also provided with a positive integer 'K'.

Your task is to find the first negative element in every window (contiguous subarray) of length 'K'. If there is no negative element in a window, then print 0 for that window.

For example:
For the given array 'ARR' = [5, -3, 2, 3, -4] and 'K' = 2.
Output = -3 -3 0 -4

We have four windows of length 2 in 'ARR'
[5, -3] having -3 as first negative element.
[-3, 2] having -3 as first negative element.
[2, 3] having no negative element
[2, -4] having -4 as first negative element.
Detailed explanation ( Input/output format, Notes, Images )
Input Format:
The first line of input contains an integer 'T' representing the number of test cases or queries to be processed. Then the test case follows.

The first line of each test case contains two single space-separated integers 'N' and 'K' representing the size of the array/list and the positive integer denoting the length of the window respectively.

The second line of each test case contains 'N' single space-separated integers representing the array/list elements.
Output Format:
For each test case, print (N - K + 1) single space-separated integers representing the first negative element in each of the windows of length 'K'.

Print output of each test case in a separate line.
Note:
You are not required to print the expected output; it has already been taken care of. Just implement the function. 
Constraints:
1 <= T <= 10
1 <= N <= 5 * 10^4
1 <= K <= N
-10^9 <= ARR[i] <= 10^9

Time Limit: 1 sec
Sample Input 1:
2
5 3
4 0 3 -12 1
3 1
45 12 -6
Sample Output 1:
0 -12 -12
0 0 -6
Explanation For Sample Input 1:
For the first sample test case, we have three windows of length 3 in the first test case

[4, 0, 3] having no negative element.
[0, 3, -12] having -12 as first negative element.
[3, -12, 1] having -12 as the first negative element. 

For the second sample test case, please refer problem statement for the explanation.
Sample Input 2:
2
8 2
4 -7 4 6 7 -11 2 4 
3 2
1 2 3
Sample Output 2:
-7 -7 0 0 -11 -11 0
0 0
Hint

Try to naively traverse for every subarray of length ‘K’ and find the first negative element for each window.

Approaches (3)
Brute Force

We have a simple brute force solution for this problem. We will traverse in every subarray of length ‘K’ and find our first negative element for each of them. For this, we will use two nested loops. 

 

The outer loop will give us the starting point for each window of length ‘K’ and the inner loop will traverse in this window to find our first negative element. We will keep updating our answer for each window in another array.

Time Complexity

O(N*K), where ‘N’ is the size of the array and ‘K’ is the length of the window.

 

For an array of size ‘N’, we have (N - K + 1) subarrays/windows of length ‘K’ and for each one of them, we will linearly traverse the window to find the first negative element. This will lead to (N - K + 1)*K operations.

 

So in the worst-case scenario, the total number of operations have an upper bound of O(N*K).

Space Complexity

O(1)

 

We are using constant extra space.

Code Solution
(100% EXP penalty)
First Negative In Every Window
Full screen
Console