算法--求需要排序的最短子数组问题
2017-03-12 00:40
357 查看
最短子数组练习题
第19节 最短子数组练习题
对于一个数组,请设计一个高效算法计算需要排序的最短子数组的长度。给定一个int数组A和数组的大小n,请返回一个二元组,代表所求序列的长度。(原序列位置从0开始标号,若原序列有序,返回0)。保证A中元素均为正整数。
测试样例:
[1,4,6,5,9,10],6
返回:2
Java (javac 1.7)
代码自动补全
1
import java.util.*;
2
3
public class Subsequence {
4
public int shortestSubsequence(int[] A, int n) {
5
//假定最大值,最小值
6
int max = A[0];
7
int min = A[A.length - 1];
8
9
//i和j之间的范围便是需要排序的最短子数组(一开始假定全部范围)
10
int p = 0, q = A.length - 1;
11
12
/**
13
* 从右向左遍历,找出不合适数的最右范围
14
* (遍历过部分的最大值大于当前正在遍历的值,那么当前值就是invalid,那么真实排序之后,这个最大值在当前位置,或者是更右的位置)
15
*
16
*只记录发生这种情况的最右位置
17
*/
18
for(int i = 1; i < A.length; i++){
19
if(max > A[i]) p = i;
20
else max = A[i];
21
}
22
/**
23
*从左向右遍历,找出不合适数的最左范围
24
*(遍历过部分的最小值小于当前正在遍历的值,那么当前值就是invalid,那么真实排序之后,这个最小值在当前位置,或者是更左的位置)
25
*
26
*只记录发生这种情况的最左位置
27
*/
28
for(int i = A.length-2; i > -1; i--){
29
if(min < A[i]) q = i;
30
else min = A[i];
31
}
32
33
if(p == 0 && q == A.length - 1){
34
return 0;//证明原数组是有序的
35
}
36
return p-q+1;
37
}
38
}
您的代码已保存
答案正确:恭喜!您提交的程序通过了所有的测试用例
运行
相关文章推荐
- [算法]需要排序的最短子数组长度
- 【算法题】重新排序的最短子数组
- 用qsort对字符串数组排序需要注意的几个问题
- 求需要排序的最短子数组的长度
- 需要排序的最短子数组
- 左神算法 未排序数组中累加和为给定值的最长子数组系列问题
- 一个数组变换的算法问题-关于前端的分页功能排序(点击/热门)功能
- 需要排序的最短子数组长度
- 最短路径算法之AStar算法(二) A Star算法需要注意的问题
- Golang算法问题之数组按指定规则排序的方法分析
- 需要排序的最短子数组长度
- 算法基础:数组指定规则排序问题(Golang实现)
- 用qsort对字符串数组排序需要注意的几个问题
- 需要排序的最短子数组长度
- 需要排序的最短子数组长度
- 1754:字符串数组排序问题(4.1算法之排序和算法性能)
- 需要排序的最短子数组长度
- 需要排序的最短子数组长度
- 数组与矩阵---需要排序的最短子数组长度
- 数组排序问题的两种方法:插入排序算法和递归(分治)算法