carloscn / structstudy

Leetcode daily trainning by using C/C++/RUST programming.
4 stars 1 forks source link

leetcode1827: Minimum Operations to Make the Array Increasing #292

Open carloscn opened 1 year ago

carloscn commented 1 year ago

Description

ou are given an integer array nums (0-indexed). In one operation, you can choose an element of the array and increment it by 1.

For example, if nums = [1,2,3], you can choose to increment nums[1] to make nums = [1,3,3]. Return the minimum number of operations needed to make nums strictly increasing.

An array nums is strictly increasing if nums[i] < nums[i+1] for all 0 <= i < nums.length - 1. An array of length 1 is trivially strictly increasing.

Example 1:

Input: nums = [1,1,1] Output: 3 Explanation: You can do the following operations: 1) Increment nums[2], so nums becomes [1,1,2]. 2) Increment nums[1], so nums becomes [1,2,2]. 3) Increment nums[2], so nums becomes [1,2,3].

Example 2:

Input: nums = [1,5,2,4,1] Output: 14 Example 3:

Input: nums = [8] Output: 0

Constraints:

1 <= nums.length <= 5000 1 <= nums[i] <= 104

carloscn commented 1 year ago

Analysis

pub fn min_operations(nums: Vec<i32>) -> i32
{
    if nums.len() < 1 {
        return 0;
    }

    let mut ret:i32 = 0;
    let mut ns = nums.clone();

    ns.push(0);
    for i in 0..ns.len() - 2 {
        if ns[i + 1] <= ns[i] {
            ret += ns[i] - ns[i + 1] + 1;
            ns[i + 1] = ns[i] + 1;
        }
    }

    return ret;
}
carloscn commented 1 year ago

code

https://review.gerrithub.io/c/carloscn/structstudy/+/557084 https://github.com/carloscn/structstudy/commit/fe4ea787f458c6ae26873821852163e97e5fe89c