`
YuHuang.Neil
  • 浏览: 187644 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Algorithm 01 : 寻找最长有序子序列

阅读更多
Question : To find max sorted contiguous subsequence of an Array.

问题:查找数组中的最长有序子序列。


/**
  * @author YuHuang
  * @vision 2011-10-03
  * This program is only for algorithm training.
  *
  */


public class MaxSortedContiguousSubsequence {

        private int[] rArray;

        public void doSearch(int[] sArray){
                int len = sArray.length;
                int[] markArray=new int[len];

                markArray[len-1]=0;
                for(int index=len-2;index>=0;--index){
                        if(sArray[index]<=sArray[index+1]){
                                markArray[index]=markArray[index+1]+1;
                        }
                }

                int startIndex=0;
                for(int index=1;index<=len-1;++index){
                        if(markArray[index]>markArray[startIndex]){
                                startIndex=index;
                        }
                }

                rArray=new int[markArray[startIndex]];
                for(int index=startIndex;index<startIndex+markArray[startIndex];++index){
                        rArray[index-startIndex]=sArray[index];
                }

        }

        public void printResult() {
                System.out.print("Max Sorted Contiguous Subsequence : ");
                for(int elem : rArray){
                        System.out.print(elem+" ");
                }
        }

        public static void main(String[] args){
                int[] sArray={2,3,1,2,3,4,5,2,1,3};
                MaxSortedContiguousSubsequence mscs = new MaxSortedContiguousSubsequence();
                mscs.doSearch(sArray);
                mscs.printResult();
                System.out.println();
        }
}




如果有更低复杂度的算法,请告知,谢谢!

分享到:
评论

相关推荐

    欧几里得、批处理作业、素数环、天平问题、图着色、折半查找、最大字段和、最长递增子序列

    8. **最长递增子序列**:最长递增子序列(LIS)问题是找出一个序列中最长的严格递增子序列的长度。这是一个经典的动态规划问题,广泛应用于各种优化和排序算法中,例如股票交易策略或在线比赛排名。 以上这些算法和...

    algorithm::laptop:数据结构和算法研究:laptop:

    3. **动态规划**:解决最优化问题,如背包问题、最长公共子序列等。 4. **贪心算法**:每次做出局部最优选择,以期望达到全局最优,如霍夫曼编码。 5. **回溯法**:在解空间树中进行深度优先搜索,遇到无效解时退回...

    Algorithm-allalgorithms-js.zip

    3. 最长公共子序列:找出两个序列中最长的公共子序列,不考虑子序列的顺序。 五、字符串算法 字符串操作在文本处理中广泛使用,如: 1. KMP算法:用于字符串匹配,避免不必要的回溯。 2. Rabin-Karp滚动哈希:在...

    Algorithm:演算法

    - **最长公共子序列(LCS)**:找出两个序列中长度最长的不相交子序列。 5. **贪心算法**: - **霍夫曼编码**:通过贪心策略构建最优的前缀码,用于数据压缩。 - **Prim's最小生成树算法**:在加权无向图中找到...

    Algorithm-Javascript.zip

    - 最长公共子序列:寻找两个序列的最长非降序子序列。 - 矩阵链乘法:通过优化计算顺序,减少矩阵相乘的运算次数。 5. 数据结构: - 队列:先进先出(FIFO)的数据结构,常用于任务调度和消息传递。 - 栈:后进...

    Algorithm-algorithm-playground.zip

    4. **动态规划**:动态规划是解决最优化问题的有效方法,如背包问题、最长公共子序列、斐波那契数列等,通过将大问题分解为小问题,避免重复计算,达到最优解。 5. **贪心策略**:贪心算法在每一步选择中都采取在...

    Algorithm-way-to-algorithm.zip

    典型的例子如背包问题、最长公共子序列等。 贪心策略和回溯法则常用于在约束条件下寻找最优解,如在任务调度、旅行商问题等场景。 通过深入学习这个压缩包中的教程和源代码,我们将能够理解和掌握这些算法的核心...

    algorithm-essentials-java

    - 描述:寻找给定未排序整数数组中的最长连续子序列。 - 关键技术:利用哈希表存储出现过的数字及其索引,以便快速查找。 #### 单链表 单链表是一种线性表的链式存储结构,每个节点包含数据域和指向下一个节点的...

    Algorithm-PHP-algorithm.zip

    动态规划算法是另一种强大的工具,常用于解决具有重叠子问题和最优子结构的问题,如背包问题、最长公共子序列和斐波那契数列。在PHP中,通过递归或迭代方式实现动态规划,可以帮助找到全局最优解。 最后,搜索算法...

    Algorithm-algorithms.zip

    7. **动态规划和贪心算法**:动态规划通过解决子问题来解决原问题,常用于背包问题、最长公共子序列等。贪心算法则是每一步都采取局部最优解,但并不保证全局最优,适用于霍夫曼编码、最小生成树等。 8. **实践应用...

    Algorithm-Algorithm.zip

    6. **动态规划**:通过解决子问题来解决原问题,如背包问题、最长公共子序列等。 7. **贪心算法**:每次做出局部最优解,期望得到全局最优解,如霍夫曼编码。 8. **回溯法**:在解决问题过程中遇到困难时,退回一步...

    data_structure_algorithm:数据结构与算法

    - **动态规划**:解决最优化问题,通过将大问题分解为小问题,避免重复计算,如背包问题、最长公共子序列等。 - **贪心算法**:每次做出局部最优选择,期望全局最优,如霍夫曼编码、Prim最小生成树算法等。 - **...

    Algorithm-algorithm.zip

    4. **动态规划**:是一种解决复杂问题的有效方法,比如背包问题、最长公共子序列、斐波那契数列等,通过建立状态转移方程和记忆化技术来避免重复计算。 5. **分治法**:将大问题分解为小问题来解决,如快速排序、...

    JavaAlgorithm:有用的 Java 算法

    - 最长公共子序列:寻找两个序列最长的不相交子序列。 - 最短路径问题:如Dijkstra算法和Floyd算法,用于计算图中两点间的最短路径。 5. 字符串处理: - KMP算法:用于字符串匹配,避免重复回溯,提高查找效率。...

    algorithm资料

    经典的动态规划问题有背包问题、最长公共子序列、斐波那契数列等。这种算法的关键在于构建合适的状态转移方程,并利用记忆化技术避免重复计算。 5. **贪心算法**:贪心算法在每一步选择局部最优解,期望最终得到...

    Data-structure-and-Algorithm-:第570章

    4. 动态规划:解决具有重叠子问题和最优子结构的问题,如背包问题、最长公共子序列等。 5. 回溯法:用于解决组合优化问题,如八皇后问题、迷宫求解等。 6. 分治策略:将大问题分解为小问题求解,如快速排序、归并...

    java常见算法...........

    - 最长递增子序列(LIS):在数组中找出最长的递增子序列。 - 状态转移方程:构建状态转移矩阵,解决复杂问题。 5. 树结构: - 二叉树操作:遍历(前序、中序、后序)、查找、插入和删除。 - 平衡树:AVL树和红黑...

    AlgorithmDesign:几个项目展示了我在Java算法设计方面的技能

    4. **动态规划**:动态规划是一种通过将问题分解为子问题来求解的方法,例如斐波那契数列、背包问题、最长公共子序列等。它强调了“记忆化”和“最优子结构”的特性,能有效避免重复计算,提高效率。 5. **贪心策略...

Global site tag (gtag.js) - Google Analytics