`
SavageGarden
  • 浏览: 220014 次
  • 性别: 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)程序语句也要越少越好。
这个问题曾经困扰过David Gries这位知名的计算机科学家。本题与解答取自Dacid Gries编写的有关程序设计的专著。
分享到:
评论
3 楼 SavageGarden 2008-08-20  
java版
public static void newPlateau(int[] array){
		int length=1;
		int value=0;
		for(int i=1;i<array.length;i++){
			if(array[i]==array[i-length]){
				value=array[i];
				length++;
			}
		}
		System.out.println("max="+length+" and value="+value);
	}
2 楼 SavageGarden 2008-08-20  
看了答案,原来是数组是已经排好序的,于是就有了答案里的解法,再看自己的程序,实在是汗颜。
#include <stdio.h>
main(){
	int x[20]={1,2,2,3,3,3,3,4,4,5,6,6,6,7,7,7,7,8,8,8};
	int max=longest_plateau(x,20);
	printf("%d\n",max);
}
int longest_plateau(int x[],int n){
	int length=1;
	int i=1;
	for(i=1;i<n;i++){
		if(x[i]==x[i-length])
			length++;
	}
	return length;
}

fedora8下gcc编译通过
1 楼 SavageGarden 2008-08-16  
public class MyTest {
	public static void main(String args[]){
		int[] array={1,2,2,3,3,3,4,5,5,6,6,6,6,6,7,7};
		plateau(array);
	}
	/**
	 * 查找数组中最长的平台
	 * 定义HashMap型变量hm,记录元素和元素的个数
	 * 定义三个int型变量,x记录元素,y记录元素个数,max记录个数最多的元素的个数
	 * 遍历数组
	 * 如果当前值不等于x值,则判断y是否已经大于max值,是则记录x、y于HashMap,并改变max值
	 * 	然后改变x值为当前值,并将y重置为1
	 * 如果当前值等于x值,而且当前元素并不是数组的最后一个值,则将y自加
	 * 如果当前值等于x值,而且当前元素并是数组的最后一个值,则判断y是否已经大于max值,是则记录x、y于HashMap,并改变max值
	 * @param array
	 */
	public static void plateau(int[] array){
		HashMap hm = new HashMap();
		int x=0;int y=0;int max=0;
		if(array.length>0){
			x=array[0];
			for(int i=0;i<array.length;i++){
				if(array[i]!=x){
					if(y>max){
						max=y;
						hm.put(max, x);
					}
					x=array[i];
					y=1;
				}else if(i!=array.length-1){
					y++;
				}else{
					y++;
					if(y>max){
						max=y;
						hm.put(max, x);
					}
				}
			}
			System.out.println("max="+max+" and value="+hm.get(max));
			StringBuffer sb=new StringBuffer();
			for(int i=0;i<max;i++){
				if(i!=max-1){
					sb.append(hm.get(max)+".");
				}else{
					sb.append(hm.get(max));
				}
			}
			System.out.println(sb.toString());
		}else{
			System.out.println("输入的数组长度不能为0");
		}
	}
}

相关推荐

    算法笔记和算法笔记-上机训练实战指南整套-胡凡

    1. **编程题解**:通过解析PAT(普林斯顿大学自动化测试平台)和CCSP(中国计算机软件能力认证)等竞赛题目,让学习者了解实际编程环境下的算法应用。 2. **代码实现**:提供常见算法的代码实现,可能是C++、Java或...

    算法设计题集_算法题目_

    这本书包含了各种难度级别的算法题目,涵盖了从基础的排序和搜索问题到复杂的数据结构和图论算法。通过这些题目,读者可以逐步提升自己的编程思维和问题解决能力。 在算法题目这一主题中,我们首先会遇到的是基础...

    数据结构和算法-五大常用算法:动态规划算法,算法数据结构

    动态规划算法在很多领域都有应用,如图论中的最短路径问题、背包问题、最长公共子序列等。掌握动态规划不仅可以帮助我们解决具体问题,还能培养我们分析和解决问题的能力,是提升编程能力的关键一步。在实际编程中,...

    ACM程序设计算法大全--动态规划

    在ACM程序设计中,动态规划通常用于解决以下类型的题目: 1. **背包问题**:如0-1背包、完全背包和多重背包问题,目标是找到如何选取物品以最大化价值,同时不超过背包的总容量。 2. **最长公共子序列**:在两个或...

    acm算法模板-适合初学者使用_初学_算法_ACM_

    3. **动态规划**:涵盖背包问题、最长公共子序列、矩阵链乘等经典DP题目。 4. **贪心算法**:解决局部最优解可导致全局最优的问题,如霍夫曼编码、活动安排等。 5. **数据结构**:如链表、树、队列、栈、哈希表等的...

    MOOC数据结构与算法--电子科技大学(戴波)答案

    应用拓扑排序算法或Dijkstra算法计算从起始节点到各个节点的最长路径。 3. 最长路径即为关键路径。 #### 示例解析 由于题目中未给出具体的数据,这里不提供具体的代码实现。但基于上述算法思想,可以手动或编写...

    经典算法题目

    本资源集合了一些经典算法题目,虽然部分答案不全,但它们的价值在于提供了一个学习和实践的平台,鼓励我们通过动手编程来提升自己的算法思维和实现技巧。 首先,入门必做题.doc是一份精心挑选的初级算法题目集,它...

    算法题示例-最长公共子序列.rar

    算法题目:最长公共子序列(Longest Common Subsequence, LCS) 题目描述: 给定两个字符串 text1 和 text2,找到这两个字符串的最长公共子序列(LCS)的长度。一个字符串的子序列是指这样一个字符串:它通过删除原...

    高级算法-nju-onlineJudge-master-java和python的答案

    5. **考试题目**:资源中提到的“考试题目”可能包含了各种难度级别的算法问题,涵盖了许多经典的算法竞赛题目,这些题目通常需要学习者运用所学的算法知识去解决实际问题,从而提升算法设计和编程能力。 6. **学习...

    各个大厂算法题目大全

    《算法题目大全》是针对程序员面试和笔试精心整理的一份资源集合,涵盖了C++、Java、Python等主流编程语言的算法实现。这份压缩包文件名为“程序员算法面试笔试大全data structures and algorithms”,揭示了其核心...

    动态规划算法经典题目

    动态规划算法经典题目分析 动态规划是一种非常经典的算法思想,解决的问题领域非常广泛。动态规划的基本思想是将一个复杂的问题分解成多个小问题,通过解决这些小问题来解决整个问题。今天,我们将要探讨动态规划的...

    《计算机算法设计与分析》算法实现题2-1

    算法实现题2-1是书中的一个重要练习,虽然具体的题目内容没有给出,但通常这类题目会涉及基础的算法类型,如排序、查找、图论或者动态规划等。在计算机科学的学习过程中,实践和理解算法的实现是至关重要的。下面...

    中科大计算机算法13-17年期末试卷

    总结,学习和理解算法对于计算机专业学生至关重要,而中科大的期末试卷提供了检验和提升自己算法能力的平台。通过深入学习和反复练习,不仅可以应对考试,更能为未来的职业生涯打下坚实的基础。

    leetcode 平台题目实现代码

    《LeetCode平台题目实现代码》是一本集合了LeetCode平台上众多算法题目的解题代码集,主要使用C++语言编写。这本书是编程爱好者和个人学习者的重要资源,它可以帮助读者提升在算法面试和数据结构理解方面的技能。...

    程序员代码面试指南:IT名企算法与数据结构题目最优解-代码

    《程序员代码面试指南:IT名企算法与数据结构题目最优解-代码》是一部专为准备IT企业面试的程序员量身定制的指南。本书的核心内容围绕算法和数据结构展开,通过Java语言实现,旨在帮助读者掌握解决常见面试问题的...

    算法基础-2009试卷与答案1

    1. **时间复杂度分析**:题目要求证明两个函数的渐进时间复杂度关系,如 `( )2f nnn` 和 `( )g nn`,这是考察大O表示法的基础知识,用来描述算法运行时间随输入规模的增长趋势。 2. **递归方程求解**:递归...

    实用算法基础教程--算法和数据结构

    - **题目分析**: 分析历年NOIP考试中涉及动态规划的经典题目。 - **第四节:背包问题** - **分类**: 详细介绍0/1背包问题、完全背包问题等不同类型背包问题的解决方案。 - **第五节:动态规划应用举例** - **实战...

    程序设计题目(用算法设计)

    在编程和计算机科学领域,程序设计题目是提升技能和理解算法设计的重要手段。这些题目通常要求我们使用不同的算法和数据结构来解决问题,从而提高我们处理复杂问题的能力。在这个主题下,我们将深入探讨如何通过算法...

    java经典算法90 题目

    在解答这些Java经典算法题目时,除了掌握算法本身,还需要关注代码的可读性、可维护性和效率。通过不断实践,开发者可以提升自己的编程技巧,为解决实际工作中的复杂问题打下坚实的基础。因此,无论是初学者还是经验...

Global site tag (gtag.js) - Google Analytics