最短排序数组(动态规划)
来源:互联网 发布:比特精灵软件下载 编辑:程序博客网 时间:2024/06/03 14:52
题目描述
对于一个无序数组A,请设计一个算法,求出需要排序的最短子数组的长度。
给定一个整数数组A及它的大小n,请返回最短子数组的长度。
测试样例:
[1,5,3,4,2,6,7],7
返回:4
思路:应用sort方法,产生一个排序的数组作为参照,根据这个参照对比原来数组,如果对比一样,就向前(向后),只有一边不一样就,判断另一边,两边都不一样退出。
class ShortSubsequence {public: int findShortest(vector<int> A, int n) { vector<int> B = A; sort(B.begin(),B.end()); int left = 0; int right = n - 1; while(left<=right){ if(A[left] == B[left] && A[right] == B[right]){ left++; right--; } else if(A[left]!=B[left] && A[right]!=B[right]) break; else if(A[left]!=B[left &&A[right]==B[right]]){ right--; }else{ left++; } } if(right >=left) return right-left+1; else return 0; }};
未完善代码,通过百分之十,有兴趣的同学可以自己完善下,欢迎交流:
class ShortSubsequence { bool ynSort(int n,int m,vector<int> A){ for(int i = n;i<m;i++) for(int j = i+1 ; j<m;j++){ if(A[i]>A[j]) return true; } return false; }public: int findShortest(vector<int> A, int n) { int aSize = n; int aArray[aSize][aSize]; int min = 65535; bool mark = false; for(int i = 0;i<aSize;i++) for(int j = 0;j<aSize;j++) aArray[i][j]=65535; for(int i = 0;i<aSize;i++) for(int j = i+1;j<aSize;j++) if(ynSort(i,j,A)){ aArray[i][j]=j-i+1; mark =true; } for(int i = 0;i<aSize;i++) for(int j = 0;j<aSize;j++) if(aArray[i][j] < min) min = aArray[i][j]; if(mark) return min; else return 0; }};
阅读全文
1 0
- 最短排序数组(动态规划)
- 动态规划-最短排序
- 最短路径(动态规划dp)
- 动态规划 最短路径
- 动态规划 最短路径
- 最短路径 动态规划
- 最短路径(动态规划)
- POJ 3356 最短编辑距离(动态规划)
- poj 3356 AGTC(动态规划:最短编辑距离)
- 字符串的修改(动态规划-最短编辑距离)
- 动态规划(算法+理论) ★最短路径
- 动态规划实例(十五):最短路径Floyd
- 迪杰斯特拉算法求解最短路径(三)---《动态规划》
- 最短排序子数组
- 最短排序子数组
- 最短排序子数组
- 城市交通网(动态规划,最短路径,输出最短路径)
- 动态规划法求多段图的最短路径
- [Gym-101201K]
- 单元测试
- Qt 中实现在控件中点击鼠标,就在鼠标点击处加载图片的方法
- 算法设计与分析笔记之(7):概率算法
- 数学趣事
- 最短排序数组(动态规划)
- 用C2制作小游戏
- Jzoj4604 树
- Construction sets 二分+背包
- The C Programming Language 练习题2-7
- 递归删除链表中的指定元素x
- [LeetCode]20. Valid Parentheses
- C语言习题一
- 前端之路——jquery第一课