• 665. Non-decreasing Array


    Given an array 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 array[i] <= array[i + 1] holds for every i (1 <= i < n).
    
    Example 1:
    Input: [4,2,3]
    Output: True
    Explanation: You could modify the first 
    4
     to 
    1
     to get a non-decreasing array.
    Example 2:
    Input: [4,2,1]
    Output: False
    Explanation: You can't get a non-decreasing array by modify at most one element.
    Note: The n belongs to [1, 10,000].
    class Solution {
        public boolean checkPossibility(int[] nums) {
            if (nums == null || nums.length < 3) {
                return true;
            }
            int cnt = 0;
            for (int i = 1; i< nums.length; i++) {
                if (nums[i] < nums[i - 1]) {
                    if (i < nums.length - 1 && nums[i + 1] < nums[i - 1]) {
                        nums[i - 1] = nums[i];
                        cnt++;
                        if (i - 2 >= 0 && nums[i - 2] > nums[i - 1]) {
                            return false;
                        }
                    } else {
                        nums[i] = nums[i - 1];
                        cnt++;
                    }
                }
                if (cnt > 1) {
                    return false;
                }
            }
            return true;
        }
    }
    

      

      

    We can also do it without modifying the input by using a variable prev to hold the a[i-1]; if we have to lower a[i] to match a[i-1] instead of raising a[i-1], simply skip updating prev;

    without modified

    class Solution {
        public boolean checkPossibility(int[] a) {
            int modified = 0;
            for (int i = 1, prev = a[0]; i < a.length; i++) {
                if (a[i] < prev) {
                    if (modified++ > 0) return false;
                    if (i - 2 >= 0 && a[i - 2] > a[i]) continue;
                }
                prev = a[i];
            }
            return true;
        }
    }
    

      

  • 相关阅读:
    C# 控件缩写大全+命名规范+示例
    Database Link详解
    DataTable.Compute 方法
    Dotfuscator Professional Edition 4.9.7500.9484 混淆工具破解版+使用教程
    C#中的委托和事件(续)
    Jquery 获取元素内容
    ASP.NET 常用类
    JavaScript动态生成访问方法
    LINQ查询操作符
    HTML乱码问题和header结构
  • 原文地址:https://www.cnblogs.com/apanda009/p/7659316.html
Copyright © 2020-2023  润新知