牛客网刷题笔记---求最短未排序子序列
来源:互联网 发布:手机指画软件 编辑:程序博客网 时间:2024/06/07 00:31
题目是:
对于一个无序数组A,请设计一个算法,求出需要排序的最短子数组的长度。
给定一个整数数组A及它的大小n,请返回最短子数组的长度。
[1,5,3,4,2,6,7],7
返回:4在考虑这道题时,思路是,先将该未排序的数组进行排序,然后将排好序的和未排好序的数组串进行比较,前后各放一个指针,前边的指针所指的值相同,则向后移动直到不相同为止,后边的向前移动,直至不相同为止,两个指针的距离加一即为最短子数组长度,当两指针指向同一位置时,返回零。
代码如下:
class ShortSubsequence {
public:
int findShortest(vector<int> A, int n) {
// write code here
vector<int> B = A;
for (int i = 0; i < n; ++i)
for (int j = i; j < n; ++j) {
if (B[i] > B[j]) {
int temp = B[i];
B[i] = B[j];
B[j] = temp;
}
}
int head = 0, tail = n - 1;
while (head < tail) {
if (A[head] == B[head])
head ++;
if (A[tail] == B[tail])
tail --;
if (A[head] != B[head] && A[tail] != B[tail])
break;
}
if (tail == head)
return 0;
else
return tail - head + 1;
}
};
不过我怎么感觉我的这个方法有钻空子嫌疑,只是为了通过测试用例而已。试想一下,如果有一个效率高的算法,能够得到最小未排序子序列,然后只对子序列进行排序,那么这样,对整个数组的排序操作,性能是不是更好呢?
不管了,现阶段是先能写出正确的代码,过一段时间,在数据结构和算法熟悉的基础上,在考虑代码的优化吧。
还有一个想说的是,每次排序,我都是用交换来进行排序的,这样的排序简单,能够快速地写出代码,缺点就是时间复杂度太高,在以后地题目上,要多多练习其他高效地排序算法。
- 牛客网刷题笔记---求最短未排序子序列
- 排序子序列
- 排序子序列
- 排序子序列
- 笔记-最大子序列
- 【算法题】排序子序列
- 【笔记】最长上升子序列
- 快速排序的划分子序列思想:
- hdu 1160 排序 + 最长上升子序列
- hdu1160(最长下降子序列+排序)
- 学习笔记-最长上升子序列问题
- 最大子序列求和整理笔记
- 笔记——最长上升子序列
- 合并已排序的两个子序列2
- 求所有可能排序与所有可能子序列
- hdu 1025 最长上升子序列+排序
- nyoj16 矩形嵌套 排序+最长增长子序列
- hdu 5811 Colosseo (拓扑排序 + 最长上升子序列)
- GridView的基本使用
- python的命令行参数处理
- 190. Reverse Bits
- 百度地图的使用定位,逆地理编码,自定义不同类型的大头针
- android 删除sd卡某个目录下的所有文件
- 牛客网刷题笔记---求最短未排序子序列
- Oracle 多表查询
- eclipse使用MAVEN打包可执行的jar包
- 命令行学习
- ffmpeg 安装 分割 截图 转换 加水印
- Android ViewPager + Fragment的使用
- iperf based on linux
- wincachegrind配合Xdebug优化php 程序
- HTTP协议的头信息详解