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

经典算法——最长平台问题

阅读更多
经典最长平台算法

已知一个已经从小到大排序的数组,这个数组中的一个平台(Plateau)就是连续的一串值相同的元素,并且这一串元素不能再延伸。例如,在1,2,2,3,3,3,4,5,5,6中[1]、[2,2]、[3,3,3]、[4]、[5,5]、[6]都是平台。尝试编写一个程序,接受一个数组,把这个数组中最长的平台找出来。在上面的例子中3,3,3就是该数组中最长的平台。

要求:
1、使用的变量越少越好。
2、把数组的元素每一个都只查一次就得到结果。
3、程序的语句也要越少约好。

我尝试写了这个问题的解法,程序还有待优化(还有新的想法,先给出比较直观的解法)

import java.lang.*;

public class LargestPlateau{

        public static void getLargestPlateau(int[] numberSequence){
                int cnt=1;
                int index=0;
                int largestTimes=1;
                int times=1;

                while(cnt<numberSequence.length){
                        if(numberSequence[cnt-1]!=numberSequence[cnt]){
                                if(largestTimes<times){
                                        largestTimes=times;
                                        index=cnt-times;
                                        times=1;
                                }else{
                                        times=1;
                                }

                        }else{
                                ++times;
                        }
                        ++cnt;
                }

                for(int i=index;i<index+largestTimes;++i){
                        System.out.print(numberSequence[i]+" ");
                }

                System.out.println();
        }

        public static void main(String[] args){
                int[] numberSequence={1,2,2,3,3,3,4,5,5,5,5,5,6};
                LargestPlateau.getLargestPlateau(numberSequence);
        }
}



如果只是需要计算出一串元素的最长平台的长度,那么还可以有以下的解法(参考David Gries编写的相关专著):


import java.lang.*;

public class LargestPlateau1{
        public static int getMaxLengthofLargestPlateau(int[] numberSequence){
                int size=numberSequence.length;
                int length=1;

                for(int i=1;i<size;++i){
                        if(numberSequence[i]==numberSequence[i-length]){
                                length++;
                        }
                }

                return length;          //the length of largest plateau
        }

        public static void main(String[] args){
                int[] numberSequence={1,2,2,3,3,3,4,5,5,5,5,5,6,6};
                System.out.println("The length of largest plateau : "+LargestPlateau1.getMaxLengthofLargestPlateau(numberSequence));

        }
}





分享到:
评论

相关推荐

    程序员实用算法——sourceCode

    "程序员实用算法——sourceCode"这个主题涵盖了各种在实际开发中经常遇到的算法,通过源代码的形式来展示这些算法的实现。下面将详细介绍一些重要的算法类型及其应用。 1. 排序算法:包括快速排序、归并排序、冒泡...

    十五类算法全集——经典算法

    《十五类算法全集——经典算法》是一份深入学习计算机科学和编程的宝贵资源,它涵盖了从基础到高级的各种算法,旨在帮助初学者和有经验的程序员更好地理解和应用这些算法。算法是解决问题和优化计算过程的关键工具,...

    《算法竞赛入门经典——训练指南》代码

    这章的代码可能涉及区间调度、霍夫曼编码等经典问题。 5. `ch5`(图论):图论是算法竞赛中非常重要的一部分,包括图的遍历、最小生成树、最短路径算法(如Dijkstra、Floyd-Warshall)、网络流等问题。读者可以通过...

    最长公共子序列实验报告

    最长公共子序列(Longest Common Subsequence,LCS)是一个经典的计算机科学问题,涉及序列比较和算法设计。在本实验报告中,我们将深入探讨如何利用动态规划方法解决这一问题。 首先,LCS问题旨在找到两个给定序列...

    经典算法大全——-pdf

    背包问题、最长公共子序列、最短路径等都是动态规划的经典应用。理解动态规划的思想,可以让我们处理复杂问题时更有条理。 《贪心算法》则是另一种策略,通过每一步选择局部最优解来逐步达到全局最优。贪心策略在...

    数据结构与算法——C++版(第3版)源文件

    通过学习《数据结构与算法——C++版(第3版)》,读者可以提升对计算机底层运作的理解,提高编程能力,为解决实际问题打下坚实的基础。实践中,读者应结合书中的源代码,动手实现并测试这些数据结构和算法,以加深理解...

    《数据结构算法——Visual C++ 6.0程序集》电子教案

    如背包问题、最长公共子序列、最短路径等经典问题。 8. **递归与分治策略**:递归是解决问题的一种强大工具,如斐波那契数列、汉诺塔等。分治策略则通过将大问题分解为小问题来解决,如归并排序和快速排序就是分治...

    数据结构与算法——C++版

    学习《数据结构与算法——C++版》这本书,不仅可以深入理解数据结构和算法的原理,还能掌握如何在C++环境中高效地实现它们,这对于提升编程技能和解决实际问题具有重要意义。通过阅读书中的例子和练习,你可以更好地...

    五大常用算法——动态规划算法详解及经典例题,算法数据结构

    动态规划算法是一种强大的算法设计技术,主要用于解决多阶段决策过程中的最优化问题。它的核心思想是通过将复杂问题分解为相互关联的子问题,并利用子问题的最优解来构建原问题的最优解。动态规划强调的是“空间换...

    关于C语言的超级算法——上

    通过深入学习和实践这些超级经典算法,不仅可以提升C语言编程能力,还能培养良好的问题解决思维。在实际项目中,了解何时以及如何运用这些算法至关重要,这将直接影响程序的效率和可维护性。因此,无论是为了学术...

    数据与算法——实验报告——数列递增子序列

    在数据与算法的领域中,解决数列的最长递增子序列问题一直是一个核心议题。它不仅在理论上具有重要的地位,更在实际应用中发挥着关键作用。在EE课程中,我们通过实验报告的形式,深入探讨了如何通过动态规划方法来...

    《数据结构算法——Visual C++ 6.0程序集

    《数据结构算法——Visual C++ 6.0程序集》是一部专为学习和实践数据结构与算法设计的书籍,特别适合使用C++编程语言的读者。本书通过Visual C++ 6.0这一经典开发环境,提供了丰富的实例代码,旨在帮助读者深入理解...

    页面替换算法———LRU算法

    - 替换策略是移除最长时间未被访问的页面。 3. **缺页统计**: - 每当发生一次页面替换,即表示发生了一次缺页。 - 缺页次数通过变量`u`来累计。 4. **输出结果**: - 输出每一时刻内存中的页面状态。 - 输出...

    五大常用算法——动态规划算法详解及经典例题 (1),算法数据结构

    经典动态规划问题包括最长公共子序列、背包问题、最短路径问题(如Dijkstra算法)、矩阵链乘法等。它们在计算机科学和工程领域有广泛的应用,如网络流量优化、资源分配、生物信息学分析等。 总结来说,动态规划是一...

    MIT算法导论——算法顶尖经典教材

    5. **动态规划**:动态规划是一种用于求解最优化问题的方法,适用于解决有重叠子问题和最优子结构性质的问题,如背包问题、最长公共子序列、斐波那契数列等。 6. **贪心算法**:贪心算法在每一步选择中都采取在当前...

    算法学习资料——算法.zip

    - 动态规划:用于解决具有重叠子问题和最优子结构的问题,如背包问题、最长公共子序列等。 - 回溯与分支限界:用于在庞大的搜索空间中寻找解决方案,如八皇后问题、N皇后问题等。 3. **算法实现与应用**: - ...

Global site tag (gtag.js) - Google Analytics