zoukankan      html  css  js  c++  java
  • 665. 非递减数列

    一、题目描述

    给你一个长度为 n 的整数数组,请你判断在 最多 改变 1 个元素的情况下,该数组能否变成一个非递减数列。
    我们是这样定义一个非递减数列的: 对于数组中所有的 i (0 <= i <= n-2),总满足 nums[i] <= nums[i + 1]。
    示例 1:
    输入: nums = [4,2,3]
    输出: true
    解释: 你可以通过把第一个4变成1来使得它成为一个非递减数列。
    示例 2:
    输入: nums = [4,2,1]
    输出: false
    解释: 你不能在只改变一个元素的情况下将其变为非递减数列。
    说明:
    1 <= n <= 10 ^ 4
    10 ^ 5 <= nums[i] <= 10 ^ 5

    二、题解
    方法一:替换
    如果num[i]>num[i+1],那么我们有两种改变方式:
    1.令num[i] = num[i-1]
    2.令num[i+1] = num[i]
    应该考虑以上两种情况,只要有一种满足条件即为一次成功的改变

    class Solution {
    public:
        bool checkPossibility(vector<int>& nums) {
            int n = nums.size();
            int t;
            for(int i=0;i<n-1;i++){
                if(nums[i]>nums[i+1]){
                    t = nums[i];
                    nums[i] = nums[i+1];
                    if(is_sorted(nums.begin(),nums.end()))
                        return true;
                    nums[i] = t;
                    nums[i+1] = nums[i];
                    return is_sorted(nums.begin(),nums.end());
                }
                
            }
            return true;
        }
    };

    优化:
    通过count来记录修改的次数,若超过一次可以直接返回 false。
    如果满足,nums[i1]>nums[i+1],则令 nums[i+1]=nums[i];
    否则令nums[i]=nums[i+1];

    因为如果nums[i-1]>nums[i+1],那么令n u m s [ i ] =nums[i+1]还是不满足

    class Solution {
    public:
        bool checkPossibility(vector<int>& nums) {
            int n = nums.size();
            int t;
            int count = 0;
            for(int i=0;i<n-1;i++){
                if(nums[i]>nums[i+1]){
                    if(i-1>=0&&nums[i-1]>nums[i+1])
                        nums[i+1] = nums[i];
                    else
                        nums[i] = nums[i+1];
                    count++;
                }
                if(count>1)
                    return false;
            }
            return true;
        }
    };

  • 相关阅读:
    sql server日志已满报错
    图片基础信息
    android小细节
    内存泄露分析
    一个非常快的android模拟器
    activity退出
    ListView中内容的动画效果
    视频相关android软件
    Android Screen Monitor抓取真机屏幕
    ListView中使用type需要注意的东西
  • 原文地址:https://www.cnblogs.com/ttzz/p/14384332.html
Copyright © 2011-2022 走看看