需要排序的最短子数组
2017-09-04 21:47
302 查看
对于一个数组,请设计一个高效算法计算需要排序的最短子数组的长度.
/* 思路:首先,从左往右遍历数组,单独用一个变量记录遍历过得最大值
* 遇到遍历过的最大值大于当前数的情况,记录这种情况的最右的位置
* 然后从右往左遍历数组,用一个变量记录遍历过得最小值
* 遇到最小值比当前数要小的情况,记录这种情况的最左的位置
* 最做的位置和最右的位置中间的范围就是最短子数组
*
*/
/* 思路:首先,从左往右遍历数组,单独用一个变量记录遍历过得最大值
* 遇到遍历过的最大值大于当前数的情况,记录这种情况的最右的位置
* 然后从右往左遍历数组,用一个变量记录遍历过得最小值
* 遇到最小值比当前数要小的情况,记录这种情况的最左的位置
* 最做的位置和最右的位置中间的范围就是最短子数组
*
*/
public class 最短子数组 { public static void main(String[] args) { int A[]={1,5,4,3,2,6,7,2}; System.out.println(shortestSubsequence(A, A.length)); } public static int shortestSubsequence(int[] A, int n) { if (n<=1) { return 0; } int max=A[0]; int min=A[n-1]; int left=0; int right=0; for(int i=0;i<n;i++){ if (A[i]>=max) { max=A[i]; }else{ left=i; } } for(int j=n-1;j>=0;j--){ if (A[j]<=min) { min=A[j]; }else{ right=j; } } if (left==right) { return 0; } return left-right+1; } }
相关文章推荐
- [算法]需要排序的最短子数组长度
- 需要排序的最短子数组长度
- 需要排序的最短子数组长度
- 需要排序的最短子数组的长度
- 需要排序的最短子数组长度
- 需要排序的最短子数组长度
- 需要排序的最短子数组长度
- 需要排序的最短子数组长度
- 算法--求需要排序的最短子数组问题
- 数组与矩阵---需要排序的最短子数组长度
- 需要排序的最短子数组长度
- 需要排序的最短子数组的长度
- 求需要排序的最短子数组的长度
- 数组------最短排序+左右最值最大差+局部最小值位置+子数组最大乘积+多数组中位数
- 统计一个数字在排序数组中出现的次数。 数组是排序的,只需要找到第一个K和最后一个K就可以知道有多少个,
- 数据结构与算法分析笔记与总结(java实现)--排序12:最短子数组练习题
- 合并已经排序的两个数组,合并后也需要排序
- 最坏情况下,合并两个大小为n的已排序数组所需要的比较次数为
- LeetCode-581:Shortest Unsorted Continuous Subarray (最短未排序连续子数组) -- easy
- LeetCode-581. Shortest Unsorted Continuous Subarray (JAVA)最短未排序数组