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
        }
    };
  • 相关阅读:
    Div+CSS 布局
    Windows Mobile 参考:
    Linux export的作用
    CSS(2)基本语法
    HTML(6)超链接
    HTML(5)常用的格式标签
    HTML(8)表格
    CSS(1) CSS简介
    HTML(7)图像、背景和颜色
    HTML(10)框架
  • 原文地址:https://www.cnblogs.com/stepping/p/15094280.html
Copyright © 2011-2022 走看看