Find the index which is the last to be reduced to zero after performing a given operation in Python

Given an array and a value K, we need to find which index will be the last element to reach zero after repeatedly performing a subtraction operation. In each operation, we subtract K from each non-zero element, and if any element becomes less than K, it's set to zero.

Problem Understanding

The operation works as follows ?

  • Start from A[0] to A[N − 1], update each element as A[i] = A[i] − K

  • If A[i] < K, then set A[i] = 0

  • Once an element becomes 0, no further operations are performed on it

  • Repeat until all elements become zero

Example Walkthrough

For array A = [4, 3, 6, 8, 3, 10] and K = 4 ?

  • Operation 1: A = [0, 0, 2, 4, 0, 6]

  • Operation 2: A = [0, 0, 0, 0, 0, 2]

  • Operation 3: A = [0, 0, 0, 0, 0, 0]

Index 5 is the last to become zero, so the answer is 5.

Algorithm

The key insight is that the number of operations needed for each element is ceil(A[i]/K). We can calculate this efficiently using (A[i] + K - 1) // K. The element requiring the most operations will be the last to reach zero ?

def search_index(A, k):
    n = len(A)
    idx = -1
    max_operations = -1
    
    # Calculate operations needed for each element
    for i in range(n):
        operations = (A[i] + k - 1) // k
        
        # Find the rightmost element with maximum operations
        if operations >= max_operations:
            max_operations = operations
            idx = i
    
    return idx

# Test the function
arr = [4, 3, 6, 8, 3, 10]
K = 4
result = search_index(arr, K)
print(f"Last index to become zero: {result}")
Last index to become zero: 5

Step-by-Step Calculation

Let's trace through the calculation for our example ?

def detailed_search(A, k):
    print(f"Array: {A}, K: {k}")
    print("Index | Element | Operations Needed")
    print("------|---------|------------------")
    
    max_operations = -1
    last_index = -1
    
    for i in range(len(A)):
        operations = (A[i] + k - 1) // k
        print(f"  {i}   |    {A[i]}    |        {operations}")
        
        if operations >= max_operations:
            max_operations = operations
            last_index = i
    
    print(f"\nLast index to become zero: {last_index}")
    return last_index

arr = [4, 3, 6, 8, 3, 10]
K = 4
detailed_search(arr, K)
Array: [4, 3, 6, 8, 3, 10], K: 4
Index | Element | Operations Needed
------|---------|------------------
  0   |    4    |        1
  1   |    3    |        1
  2   |    6    |        2
  3   |    8    |        2
  4   |    3    |        1
  5   |    10   |        3

Last index to become zero: 5

Why This Works

The formula (A[i] + k - 1) // k calculates the ceiling of A[i]/k, which represents how many operations are needed to reduce A[i] to zero. We use >= instead of > to ensure we get the rightmost index when multiple elements require the same number of operations.

Conclusion

The solution efficiently finds the last index to reach zero by calculating the number of operations needed for each element. The element requiring the most operations will be the last to become zero, with ties broken by choosing the rightmost index.

Updated on: 2026-03-25T09:27:58+05:30

226 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements