zoukankan      html  css  js  c++  java
  • 581. Shortest Unsorted Continuous Subarray

    一、题目

      1、审题 

      

      2、分析

        给定一个无序整形数组,将其变为有序,最少要将连续的多少个元素进行排序。

    二、解答

      1、思路

        ① 采用两个指针。 begin 记录需要排序的元素的最低下标; end 记录需要排序的元素的最高下标。

        ② 顺序遍历数组, 采用变量 max,记录到当前元素为止的最大元素值,若当前元素值 < max ,即此元素需要进行重新排序。采用 end 记录。

        ③ 逆序遍历数组,采用变量 min,记录到当前元素为止的最小元素值,若当前元素值 > min,即词元素值也需要重新怕徐。采用 begin 记录。

        ④ 最终需要排序的元素下标序列为 begin ~ end 。 总元素个数为 end - begin +1;

        public int findUnsortedSubarray(int[] nums) {
            int n = nums.length;
            int begin = -1, end = -2;    // 若数组已经有序,则最终的结果 end - begin + 1 == 0
            int min = Integer.MAX_VALUE, max = Integer.MIN_VALUE;
            // begin 比 min 大, end 比 max 小
            // 找到最后的一个元素, 这个元素从左看比最大的石头小(end 后面的都比最大的数值大)
            for (int i = 0; i < n; i++) {
                max = Math.max(max, nums[i]);
                if(nums[i] < max)
                    end = i;
            }
            
            // 找到最前面的一个元素,这个元素从右看比最小的石头大。(begin 前面的都比最下的数值小)
            for (int i = n - 1; i >= 0; i--) {
                min = Math.min(min, nums[i]);
                if(nums[i] > min)
                    begin = i;
            }
            return end - begin + 1;
        }
  • 相关阅读:
    mongodb 介绍
    mysql+mencached 大规模web应用程序首选
    Hadoop 安装部署
    Hadoop 快速入门
    盘点十大热门Linux服务器发行版
    NoSQL数据库探讨之一 - 为什么要用非关系数据库?
    也谈IT企业发展模式
    linux中的分区与格式化(五)
    linux文件系统维护(四)
    Meta标签详解(转)
  • 原文地址:https://www.cnblogs.com/skillking/p/10935940.html
Copyright © 2011-2022 走看看