最短排序
来源:互联网 发布:软件工程硕士大学排名 编辑:程序博客网 时间:2024/05/10 15:31
对于一个无序数组A,请设计一个算法,求出需要排序的最短子数组的长度。
给定一个整数数组A及它的大小n,请返回最短子数组的长度。
/*分析:
* 要排序的最小数组 数组起点start 数组终点end
* 如果一个数组是有序的依次遍历数组 后一个永远大于前一个 单调递增
* [i,n-1) 如果A[i]>A[i+1] 说明单调性发生变化 得到数组起点start = i
* [n-1,0)如果A[i]<A[i-1] 得到数组end=i
* 从[start,end]中得到最小值min 最大值max
* [0,N] A[i]>min 得到start
* [N,0] A[i]<max 得到end*/
public int findShortest(int[] A, int n) {
int start = 0;
int end = 0;
for (int i = 0; i < n-1; i++) {
if (A[i]>A[i+1]){
start = i;
break;
}
}
for (int i = n-1; i >0 ; i--) {
if (A[i]<A[i-1]){
end = i;
break;
}
}
int min = Integer.MAX_VALUE;
int max = Integer.MIN_VALUE;
for (int i = start; i <=end ; i++) {
min = min>A[i]?A[i]:min;
max = max<A[i]?A[i]:max;
}
for (int i = 0; i < n; i++) {
if (A[i]>min){
start = i;
break;
}
}
for (int i = n-1; i >=0; i--) {
if (A[i]<max){
end = i;
break;
}
}
return end - start +1;
}
方法二:
public int findShortest(int[] A, int n) {
int start = 0;
int end = 0;
int max = Integer.MIN_VALUE;
int min = Integer.MAX_VALUE;
for(int i=0;i<n;i++){/*get right*/
if(A[i]<max){ //如果当前值小于前面的最大值 说明当前值在要调整的序列中 更新要调整序列的右值
end=i;
}else{ //如果不大与前面的最大值 更新前面的最大值
max = A[i];
}
}
for(int i=n-1;i>0;i--){/*get left*/
if(A[i]>min){ //如果当前值大于后面的最小值 说明当前值在要调整的序列中 更新要调整序列的左值
start=i;
}else{
min = A[i]; //如果不小与后面的最小值 更新后面的最小值
}
}
if(start==end){
return 0;
}
return end-start+1;
}
题目来http://www.nowcoder.com/practice/a6926700bd424820bd73777f1cb2ef60?rp=2&ru=/activity/oj&qru=/ta/2016test/question-ranking源:
- 编程 最短排序
- 最短排序
- 最短排序
- 最短排序
- 最短排序
- 最短排序子数组
- 动态规划-最短排序
- 最短排序子数组
- 编程题-最短排序
- 最短排序子数组
- [牛客网-左老师]最短排序
- 最短排序数组(动态规划)
- 图的遍历、拓扑排序、最短路径算法
- 最短代码实现vector的输入-排序-输出
- 图的遍历、拓扑排序、最短路径算法
- 算法8-10:最短路径算法之拓扑排序
- 图之拓扑排序与最短路径的引入
- 最短路径算法
- docker导入镜像时候遇到微坑
- 《C专家编程》数组和指针并不同--多维数组
- (五)PLSQL Developer 配置监听
- BZOJ 2336: [HNOI2011]任务调度
- iOS开发RunTime之函数调用
- 最短排序
- windows 7 下安装eclipse,python,pydev,flask步骤
- [bzoj2563]阿狸和桃子的游戏
- Windows 下 mysql 自动备份
- leetcode--Two Sum--无序关联容器--hash map
- 定制窗口标题
- iOS之Socket的使用-AsyncSocket
- 使用Gradle管理你的Android Studio工程
- java读取properties文件