最短排序
来源:互联网 发布:源码与公众号 编辑:程序博客网 时间:2024/05/16 16:10
如题:
对于一个无序数组A,请设计一个算法,求出需要排序的最短子数组的长度。
给定一个整数数组A及它的大小n,请返回最短子数组的长度。
测试样例:[1,5,3,4,2,6,7],7
返回:4
这一题,我开始想的是先进行排序,然后再和排好序的数组一一对应进行比较,这样找到最短需要排序的最短子数组,今天看了后边其他网友在牛客网上写的算法,真是太赞了,现在记录如下:
两次循环,第一次,先找到当前以扫描过的元素中的最大值,判断下一个元素是否小于这个最大值,若小于,则记录该为排序元素的下标,若大于,则更新最大值。(做一次判断,若没有记录下标,则说明数组有序,返回零。)
第二次循环,从后往前,找到已扫描过的元素中最小的元素,判断它的下一个元素是否小于最小元素,若大于,则记录元素下标,若小于,则更新最小值。
这样,就找到了两个下标,分别表示前边排好序元素的下一个元素和后边排好序元素的前一个元素,后边的下标减去前边的下标+1就是要排序的最短子数组长度。
记录huangjunm同学的代码如下:
int findShortest(vector<int> A, int n) { // write code here int k = -1; int max = A[0]; for(int i=1;i<n;i++){ if(max > A[i]) k = i; else max = A[i]; } if(k==-1)return 0; int m = -1; int min = A[n-1]; for(int i=n-2;i>=0;i--){ if(min < A[i]) m = i; else min = A[i]; } return k-m+1; }
若有不对之处,敬请指正。
0 0
- 编程 最短排序
- 最短排序
- 最短排序
- 最短排序
- 最短排序
- 最短排序子数组
- 动态规划-最短排序
- 最短排序子数组
- 编程题-最短排序
- 最短排序子数组
- [牛客网-左老师]最短排序
- 最短排序数组(动态规划)
- 图的遍历、拓扑排序、最短路径算法
- 最短代码实现vector的输入-排序-输出
- 图的遍历、拓扑排序、最短路径算法
- 算法8-10:最短路径算法之拓扑排序
- 图之拓扑排序与最短路径的引入
- 最短路径算法
- 2016暑假总结—对得起自己!
- Hive的系统架构
- SSL延迟有多大?
- Linux Shell脚本攻略:sed文本替换
- NOIP2015 跳石头 解题报告(二分答案)
- 最短排序
- css选择器小结
- Python的特色语法
- 2016年年中总结
- [iOS]OCR光学识别信用卡
- Codeforces Round #143 (Div. 2)-B. Magic, Wizardry and Wonders
- 【NOIP 模拟题】刺杀大使(二分答案+并查集)
- JSP学习笔记(第3次):基于配置文件与反射的工厂模式
- MySql commendLine client 常见命令