Skip to main content

Command Palette

Search for a command to run...

581. Shortest Unsorted Continuous Subarray

Published
2 min read

https://leetcode-cn.com/problems/shortest-unsorted-continuous-subarray/

problem

Given an integer array nums, you need to find one continuous subarray that if you only sort this subarray in ascending order, then the whole array will be sorted in ascending order.

Return the shortest such subarray and output its length.

example

Example 1:

Input: nums = [2,6,4,8,10,9,15]
Output: 5
Explanation: You need to sort [6, 4, 8, 10, 9] in ascending order to make the whole array sorted in ascending order.

Example 2:

Input: nums = [1,2,3,4]
Output: 0

Example 3:

Input: nums = [1]
Output: 0

Constraints:

1 <= nums.length <= 104
-105 <= nums[i] <= 105

solution

/**
* from n-1 find last lo  rightPart less than lo;
* from 0  find last hi  leftpart larger than b,
*/ 
class Solution {
    public int findUnsortedSubarray(int[] nums) {
        int n = nums.length;
        int rightMin = Integer.MAX_VALUE;
        int lo = -1;
        for (int i = n-1 ;i >= 0; i--) {
            if( nums[i] > rightMin ) {
                lo = i;
            } else {
                rightMin = nums[i];
            }
        }

        if ( lo == -1) {
            return 0;
        }

        int leftMax = Integer.MIN_VALUE;
        int hi = -1;
        for (int i = 0 ; i < n; i++) {
            if (nums[i] < leftMax) {
                hi = i;
            } else {
                leftMax = nums[i];
            }
        }
        return hi - lo + 1;
    }
}

More from this blog

Google Best Practice For Java Libraries (JLBP-0)

this is a chinese tranlation from Google Best Practice For Java Libraries Google Java库最佳实践 Google Java库的最佳实践是一些规则,旨在减少使用相关的Java库时的问题。这些实践来自于多年来维护开源Java库的经验,并且受到了从错误中吸取的许多宝贵教训的启发。我们发现遵循这些规则可以得到质量更高的Java库,减少依赖冲突和其他类型的问题。这个规则列表是开放的,所以可能会不时地添加新的规则。 最佳实践...

Nov 22, 20231 min read

【阅读】uml精粹 类图

本书的整体脉络如下: class diagram 表示对象的类型以及其间存在的静态关系。用一个长方形表示类,用连线表示类之间的关系。 具体类图 长方形 对象的类型,也就是类有三部分表示而成 类名 (class name) 属性 (attribute) 操作 (operation) 属性 (attribute) 其中抽象来说,类的成员变量 可以有两种表示, 属性表示 和 关联表示。 属性表示:就是画在框里, 一般写 包括 可见行, 类型,名称 ,也可以写默认值 和 注释。 也可以标注是否是 ...

Sep 4, 20221 min read

【夜读源码】grpc-java 客户端发送 (一)

快速回顾 接上文,一次 grpc 的请求包括四个步骤,客户端发送请求到网络,是第一步。发送过程,Stub 把请求传给了ClientCall, ClientCall 传给了 ClientStream,ClientStream 有Netty 的实现,内部会把数据传输到网络上。 本文主要介绍 blockingUnaryCall 是如何使用 ClientCall ClientChannel 工作的, waitAndDrain 和 ClientCall 的方法如何对应。 Stub 外层简述 最外层的Stu...

Sep 4, 20224 min read
【夜读源码】grpc-java  客户端发送 (一)

【夜读源码】grpc-java 概览

gRPC 是 Google 开源的一套语言无关基于HTTP2协议的 RPC 框架,其中 Java 的实现称为 grpc-java,代码地址在 https://github.com/grpc/grpc-java。 RPC (remote process call)的含义是程序执行本地的一个方法(看上去像本地执行),实际上会在远程程序代码内执行,这个过程会涉及到网络通讯和传输协议。gRPC作为 RPC 一种实现,传输的网络协议是HTTP2,传输的内容按照 Protocol Buffer 进行编码,并...

Aug 16, 20223 min read
【夜读源码】grpc-java 概览

喝一杯mockito

mockito 是最常用的 java mock 库, 用于模拟创建各种对象和行为。本文会介绍一下 基础库 mockitio的用法,进行一些练习。mockitio 通常不单独使用,配合 Junit一起使用。 下面列举一下用法, 模拟对象 创建mock 对象,并且可以要求,这个对象的成员方法符合我们的行为要求。 Foo foo= Mockito.mock(Foo.class); 直接返回 直接返回,我们需要的值 when thenReturn @Test void returnWh...

Jul 20, 20222 min read
喝一杯mockito

Xiao Kun's Infra Insight Blog

14 posts

Focus on interpreting FANG/Big Factory Engineering Blog, extracting practical experience of Infra that can be implemented