---
# System prepended metadata

title: Interview - Emily Chen

---


# Interview - Emily Chen

## Question
You are given an array of integers cost where cost[i] is the cost at the ith step on a staircase. Starting at either index 0 OR 1, you can either climb one or two steps each time. Return the minimum cost to reach the end of the staircase.
Note: You pay the cost at the current step only when moving to the next

## Examples
`Input: cost = [10,20,15]`

`Output: 20`

`Explanation: Start at 20, take 2 steps, reach the top, pay 20.`

`Input: cost = [1,100,1,1,1,100,1,1,100,1]`

`Output: 6`

`Explanation: Start at 1, take 2 steps, pay 1, take 2 steps, pay 1, take 2 steps, pay 1, take 1 step, pay 1, take 2 steps, pay 1, take 1 step, reach the top, pay 1.`


## Code
```java=
public int minCost(int[] costs) {
    // initialize totalSum = 0
    // minSumSoFar
    // iterate through the array
    //     if arr[i] + arr[i+2] <= arr[i+1] 
    //            then step to arr[0] + arr[2], and incrememnt counter
    //     else: step to arr[1]
    
    // cost = [10, 20, 15, 300, 1]
    
    // arr[i] -> arr[i - 1] or arr[i - 2]
    
    // ans[i] -> ans[i-1] or ans[i-2]
    
    // ans[i] = min(ans[i-2] + arr[i], ans[i-1] + arr[i])
    
    // minValues = {10, 20, 25, 320, 26} -> 26
    
    int[] minValues = new int[costs.length];
    
    minValues[0] = costs[0];
    minValues[1] = costs[1];
    for (int i = 2; i < costs.length; i++) {
        minValues[i] = Math.min(minValues[i-2] + costs[i], minValues[i-1] + costs[i]);
    }
    
    return Math.min(minValues[costs.length - 1], minValues[costs.length - 2]);
}

```

