Skip to main content
added 3 characters in body
Source Link
Emma Marcier
  • 3.7k
  • 3
  • 14
  • 43
  • 1 <= n <= 10 ^ 41 <= n <= 10 ^ 4
  • 10 ^ 5 <= nums[i] <= 10 ^ 5-10 ^ 5 <= nums[i] <= 10 ^ 5
  • 1 <= n <= 10 ^ 4
  • 10 ^ 5 <= nums[i] <= 10 ^ 5
  • 1 <= n <= 10 ^ 4
  • -10 ^ 5 <= nums[i] <= 10 ^ 5
Source Link
Emma Marcier
  • 3.7k
  • 3
  • 14
  • 43

LeetCode 665: Non-decreasing Array

I'm posting a solution for LeetCode's "Non-decreasing Array". If you'd like to review, please do. Thank you!

Problem

Given an array nums with n integers, your task is to check if it could become non-decreasing by modifying at most 1 element.

We define an array is non-decreasing if nums[i] <= nums[i + 1] holds for every i (0-based) such that (0 <= i <= n - 2).

Example 1:

  • Input: nums = [4,2,3]
  • Output: true
  • Explanation: You could modify the first 4 to 1 to get a non-decreasing array.

Example 2:

  • Input: nums = [4,2,1]
  • Output: false
  • Explanation: You can't get a non-decreasing array by modify at most one element.

Constraints:

  • 1 <= n <= 10 ^ 4
  • 10 ^ 5 <= nums[i] <= 10 ^ 5

Code

// Most of headers are already included;
// Can be removed;
#include <iostream>
#include <cstdint>
#include <vector>

// The following block might slightly improve the execution time;
// Can be removed;
static const auto __optimize__ = []() {
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);
    std::cout.tie(nullptr);
    return 0;
}();

struct Solution {
    using ValueType = std::int_fast32_t;
    static const bool checkPossibility(
        std::vector<int>& nums
    ) {

        if (std::size(nums) < 3) {
            return true;
        }

        ValueType max_changes = 0;

        for (ValueType index = 1; max_changes < 2 && index < std::size(nums); ++index) {
            if (nums[index - 1] > nums[index]) {
                ++max_changes;

                if (index - 2 < 0 || nums[index - 2] <= nums[index]) {
                    nums[index - 1] = nums[index];

                } else {
                    nums[index] = nums[index - 1];
                }
            }
        }

        return max_changes < 2;
    }
};


int main() {
    std::vector<int> nums = {3, 4, 2, 3};
    std::cout << std::to_string(Solution().checkPossibility(nums) == false) << "\n";
    return 0;
}