牛客堂刷题(常见面试题精讲)之最短子数组长度
来源:互联网 发布:用ps制作淘宝店铺 编辑:程序博客网 时间:2024/06/04 01:04
题目
给定一个无序数组arr,求出需要排序的最短子数组长度。
例如:
arr = [1,5,3,4,2,6,7]
返回4,因为只有[5,3,4,2]需要排序。
思路
首先从左往右遍历,然后设定一个Max,如果遍历的过程中array[i]大于Max,则置换Max,若小于Max,则指定 k 记录该位置。
然后再从右往左遍历,设定一个Min,在遍历的过程中array[i]小于Min,则置换Min,若大于Min,则指定 j 记录该位置。
于是 j~~k之间的就是需要排序的。
如上例,Max首先是1,然后遍历
Max=1,array[i]=1,置换Max,Max=1
Max=1,array[i]=5,置换Max,Max=5
Max=5,array[i]=3,k指向3,k=2,此时5~~3之间需要排序
Max=5,array[i]=4,k指向4,k=3,此时5~~4之间需要排序
依次类推,k最终指向2.
从右往左遍历的结果类似。
代码
public static int findShortestArray(){int [] arr = {2,1,3,4,5,9,7};//找寻最右边的kint max=arr[0];int min = arr[arr.length-1];int k=0,j=arr.length-1;for(int i=0;i<arr.length;i++){if(arr[i]>=max) max = arr[i];else k=i;}//找寻最左边的ifor(int i=arr.length-1;i>=0;i--){if(arr[i]<=min)min = arr[i];else j=i;}System.out.println("最左边的:"+j);System.out.println("最右边的:"+k);for(int i=j;i<=k;i++){System.out.print(arr[i]+" ");}return k-j;}
0 0
- 牛客堂刷题(常见面试题精讲)之最短子数组长度
- 牛客堂刷题(常见面试题精讲)之左右最大值之差
- 牛客堂刷题(常见面试题精讲)之矩阵打印
- 牛客堂刷题(常见面试题精讲)之最长回文序列
- 牛客堂刷题(常见面试题精讲)之随机概率
- 牛客堂常见面试题精讲(一)1
- 牛客堂常见面试题精讲(一)2
- 牛客堂常见面试题精讲(一)3
- 牛客堂常见面试题精讲(一)4
- 牛客堂常见面试题精讲(一)5
- 牛客堂刷题之最大乘积
- 牛客堂刷题之变态二分
- 牛客堂刷题之Manacher算法
- 牛客堂刷题之KMP
- 常见面试题之数组
- 常见数组面试题
- 面试题精讲
- 数组的常见面试题
- SQL Server 2005 自动化删除表分区设计方案
- 利用JS将后台返回的数据分页展示
- cordova 安装插件合集
- JS温习:基础(三)
- ios设计模式 装饰模式 decorator
- 牛客堂刷题(常见面试题精讲)之最短子数组长度
- android CHMOD命令用法
- 复制或粘贴内容到含有隐藏单元格的区域时如何只复制或粘贴可见单元格
- android textview字体大小设置
- Linux作业控制
- MFC如何使控件大小随着对话框大小自动调整
- GCD线程
- 【论文阅读:文章中心词抽取】TextRank: Bringing Order into Texts - emnlp 2004
- Copy Books