zoukankan      html  css  js  c++  java
  • 581. 最短无序连续子数组 力扣(中等) sort+首尾记录

    581. 最短无序连续子数组

    给你一个整数数组 nums ,你需要找出一个 连续子数组 ,如果对这个子数组进行升序排序,那么整个数组都会变为升序排序。

    请你找出符合题意的 最短 子数组,并输出它的长度。

    示例 1:

    输入:nums = [2,6,4,8,10,9,15]
    输出:5
    解释:你只需要对 [6, 4, 8, 10, 9] 进行升序排序,那么整个表都会变为升序排序。

    题解:

    由题得,对子数组排序后,整个数组升序,也就是说,不需要排序的数字在其对应的位置上,所以只要和排序后的数组,比对一下,就知道哪些数组需要更改,由于题目中是连续子数组,所以只需要找到第一个需要动的数字,和末尾往前第一个需要动的位置,即可。

    代码:

    class Solution {
    public:
        int findUnsortedSubarray(vector<int>& nums) {
         vector<int> k;
         k.assign(nums.begin(),nums.end());   // 复制数组
         sort(k.begin(),k.end());             // 排序
         int l=-1,r=-1;  
         for(int i=0;i<nums.size();i++)       // 从头看,找第一个在错误位置上的数字,记录位置
           if (nums[i]!=k[i])  {l=i; break;} 
         for(int i=nums.size()-1;i>=0;i--)    // 从末尾看,第一个在错误位置上的数字,记录位置
           if (nums[i]!=k[i])  {r=i; break;}
         if(l==-1) return 0;                  // 如果数组已经有序
           else return r-l+1;                 // 长度=尾坐标-头坐标+1
        }
    };
  • 相关阅读:
    .net core相关博客
    通过几个Hello World感受.NET Core全新的开发体验
    ASP.NET Core 介绍
    ASP.NET MVC4企业级实战目录
    ASP.NET MVC4入门到精通系列目录汇总
    HTTP详解
    壮哉大微软,.Net人的春天来了,你准备好了嘛!
    简析 .NET Core 构成体系
    .Net Core[译文]
    OI再见
  • 原文地址:https://www.cnblogs.com/stepping/p/15094280.html
Copyright © 2011-2022 走看看