排序练习题(五):最短子数组

对于一个数组,请设计一个高效算法计算需要排序的最短子数组的长度。

给定一个int数组A和数组的大小n,请返回一个二元组,代表所求序列的长度。(原序列位置从0开始标号,若原序列有序,返回0)。保证A中元素均为正整数。

测试样例:

[1,4,6,5,9,10],6
返回:2
public class Subsequence {
    public int shortestSubsequence(int[] A, int n) {
        // write code here
        int max = A[0],min = A[n-1],r = 0,l = 0;
        for (int i = 0;i < n;i++) {
            if (A[i] > max) max = A[i];
            else
                if (A[i] < max) r = i;
        }
        for (int j = n-1;j >= 0;j--) {
            if (A[j] < min) min = A[j];
            else
                if (A[j] > min) l = j;
        }
        if (r-l == 0) return 0;
        else return r-l+1;
    }
}
				
时间: 2024-07-29 00:42:45

排序练习题(五):最短子数组的相关文章

算法笔记 --- 最短子数组

对于一个数组,请设计一个高效算法计算需要排序的最短子数组的长度. 给定一个int数组A和数组的大小n,请返回一个二元组,代表所求序列的长度.(原序列位置从0开始标号,若原序列有序,返回0).保证A中元素均为正整数. #include <iostream> #include <vector> using namespace std; class Subsequence { public: int shortestSubsequence(vector<int> A, int

和至少为K的最短子数组

返回 A 的最短的非空连续子数组的长度,该子数组的和至少为 K 如果没有和至少为 K 的非空子数组,返回 -1 . 示例 1: 输入:A = [1], K = 1 输出:1 示例 2: 输入:A = [1,2], K = 4 输出:-1 示例 3: 输入:A = [2,-1,2], K = 3 输出:3 1 <= A.length <= 50000 -10 ^ 5 <= A[i] <= 10 ^ 5 1 <= K <= 10 ^ 9 这道题的关键在于我们要知道各个区间的

LC-581 最短未排序子数组

目标: 给出一个数组,找出里面需要重新排序的最小子数组,从而可以使得数组是升序的. 思路: 简单地首先将数组升序排序,然后比较前后与已排序数组不相同的元素,即可找到子数组. 代码: 1 class Solution { 2 public: 3 int findUnsortedSubarray(vector<int>& nums) { 4 // 先排序数组 5 vector<int> sorted = nums; 6 for (int i = 0; i < sorted

[LeetCode] Shortest Unsorted Continuous Subarray 最短无序连续子数组

Given an integer array, 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, too. You need to find the shortest such subarray and output its length. E

Leetcode 581.最短无序连续子数组

最短无序连续子数组 给定一个整数数组,你需要寻找一个连续的子数组,如果对这个子数组进行升序排序,那么整个数组都会变为升序排序. 你找到的子数组应是最短的,请输出它的长度. 示例 1: 输入: [2, 6, 4, 8, 10, 9, 15] 输出: 5 解释: 你只需要对 [6, 4, 8, 10, 9] 进行升序排序,那么整个表都会变为升序排序. 说明 : 输入的数组长度范围在 [1, 10,000]. 输入的数组可能包含重复元素 ,所以升序的意思是<=. 题目给了我们一个nums array,

最短无序连续子数组

题目描述 给定一个整数数组,你需要寻找一个连续的子数组,如果对这个子数组进行升序排序,那么整个数组都会变为升序排序. 你找到的子数组应是最短的,请输出它的长度. 示例 1: 输入: [2, 6, 4, 8, 10, 9, 15] 输出: 5 解释: 你只需要对 [6, 4, 8, 10, 9] 进行升序排序,那么整个表都会变为升序排序. 说明 : 输入的数组长度范围在 [1, 10,000]. 输入的数组可能包含重复元素 ,所以升序的意思是<=. 分析 这个题目我就比较偷懒了,直接排序然后找前后

LeetCode 581. 最短无序连续子数组(Shortest Unsorted Continuous Subarray)

581. 最短无序连续子数组 581. Shortest Unsorted Continuous Subarray 题目描述 给定一个整型数组,你需要寻找一个连续的子数组,如果对这个子数组进行升序排序,那么整个数组都会变为升序排序. 你找到的子数组应是最短的,请输出它的长度. LeetCode581. Shortest Unsorted Continuous Subarray 示例 1: 输入: [2, 6, 4, 8, 10, 9, 15] 输出: 5 解释: 你只需要对 [6, 4, 8,

算法--三色排序练习题

三色排序练习题 第17节 三色排序练习题 有一个只由0,1,2三种元素构成的整数数组,请使用交换.原地排序而不是使用计数进行排序. 给定一个只含0,1,2的整数数组A及它的大小,请返回排序后的数组.保证数组大小小于等于500. 测试样例: [0,1,1,0,2,2],6 返回:[0,0,1,1,2,2] Java (javac 1.7) 代码自动补全 1 import java.util.*; 2 3 public class ThreeColor { 4 public int[] sortTh

(第五天)数组

概念 数组是值的有序集合.每个值叫做一个元素,而每个元素在数组中有一个位置,以数字表示,称为索引. 创建数组 (1)使用数组直接量是创建数组最简单的方法,在方括号中将数组元素用逗号隔开即可. 1 var empty = []; //没有元素的数组 2 3 var primes= [2, 3, 5, 7, 11] ; //有5个数值的数组 4 5 var misc = [ 1.1, true, "a" ]; //3个不同类型的元素和结尾的逗号 数组直接量中的值不一定是常量:它们可以是任意