栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

【Leetcode刷题记录】665.非递减数列

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【Leetcode刷题记录】665.非递减数列

665.非递减数列

解题想法:刚开始想着简单的就是直接判断存在相邻递减的情况,即判断存在nums[i]>nums[i-1]的情况,但是存在不满足的用例:

后来想遍历的时候如果存在递减的情况,就用nums[i-1]更新nums[i],即下图用例的情况:

然后发现还是有不满足的情况,即下例:

于是就选择用两次遍历,分别判断,当从左往右遍历的时候,选择用左侧的更大的值更新右侧继续判断,如果满足,返回,否则从右往左遍历,选择用右侧更小的值更新继续判断,此时注意最后返回判断一定是存在一次修改

public boolean checkPossibility(int[] nums) {
        int sum1 = 0;
        //copy 一个数组
        int [] cp = new int[nums.length];
        for(int i=0;i=0;i--){
            if(i-1>=0&&nums[i-1]>nums[i]){
                nums[i-1] = nums[i];
                sum1++;
            }
            if(sum1>1) break;
        }
      //return true;
      if(sum1<=1) return true;  //就是一遍修改可以满足
      //还是两遍循环?
      int sum2 = 0;
      for(int i=0;i1) break;
      }
      return sum2==1? true:false; //因为走到这里必定存在要修改的地方,如果是0则是表示无法修改,如果>1表示修改不只一处
    }

查看题解后发现可以一次遍历,在判断的时候进行优化:

    public static boolean isSorted(int[]nums){
        for(int i=0;i 

简单的题有时候也不能想的太简单,以上动图来自:负雪明烛

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/762937.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号