`
SavageGarden
  • 浏览: 216105 次
  • 性别: 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");
		}
	}
}

相关推荐

    ACM算法设计-BFS(广度搜索)-DFS入门(深度搜索)详解

    更好的理解和学会运用深sou去做一些题目

    leetcode跳跃-algorithm-coding-golang:算法编码-golang

    golang刷leetcode常见题目 并发 HelloWorld.go 并发实现打印hello world ProConsumer.go 生产者消费者模型 常见考题代码 leetcode 22 括号生成 (回溯) leetcode 55 跳跃游戏 (贪心) leetcode 300 最长上升子序列...

    算法设计和分析题目和源代码.doc

    算法设计与分析题目和源代码 1. 穷举n位二进制数 1 2. 穷举所有排列 3 3. 二分查找 4 4. 归并排序 6 5. 快速排序 8 6. 走迷宫 9 7. 循环赛日程表 11 8. 0-1背包问题 11 9. 装载问题 13 10. 堡垒问题 15 11. 8皇后...

    中科大算法导论课程实验 最长递增子序列 代码

    中科大软件学院 算法导论课程实验 正式题目二 最长递增子序列 Visual Studio 2012 项目包 使用4种不同的方法实现最长递增子序列

    前端js 算法题目实例解析(1)

    前端js 算法题目实例解析;包括数组小于0放左大对于0放右;买与卖获取最大利润;字符串压缩;求无重复字符的最长子串;获取会问字符串

    最长公共子序列算法设计与实现(c++).zip

    动态规划思维训练——最长公共子序列算法的设计与实现 给定两个序列X={X1, X2,···,Xm}和Y={Y1, Y2,···,Yn},找出X和Y的最长公共子序列(Longest Common Sequence)。 比如字符串X:{BDCABA};字符串Y:{...

    算法分析与设计 课程作业 完整版.docx

    3.最长公共子序列 第六章——回溯算法 1.0/1背包问题 2. 皇后问题(递归实现) 3.图的 着色问题 4.装载问题 5.货郎问题(TSP) 6.最大团(MCP)问题 第七章——分支限界算法 1.0/1背包问题 2.旅行商问题 各个问题都...

    LeetCode 经典题目精选 + 算法题目精选(Java 实现)

    里面包含 10 个 LeetCode 经典题目,是用 Java 语言实现的 包含:两数之和、爬楼梯、翻转二叉树、反转链表、LRU 缓存机制、最长回文子串、有效的括号、数组中的第 K 个最大元素、实现 Trie(前缀树)、编辑距离 等

    中科大算法导论课程实验 最长递增子序列 报告

    中科大软件学院 算法导论课程实验 正式题目二 最长递增子序列 实验报告 使用4种不同的方式实现最长递增子序列

    页面置换算法实验报告

    页面置换算法实验报告包括:实验题目,实验目的,实验内容及要求,实验结果,实验总结,及后附有详细C++源代码 实验内容及要求: 1) 最佳置换算法(OPT):将以后永不使用的或许是在最长(未来)时间内不再被访问的页面...

    leetcode最大蓄水量-leetcode_note_book:leetcode题目分类及刷题总结

    算法题目列表 总数 归档:20 未归档:30 Array 题目 说明 状态 TowSum 两数之和 完成 MedianOfTwoSortArrays 两有序数组的中位数 完成 NextPermutation 下一排序 完成 DFS 题目 说明 状态 NumIslands 岛屿数量 完成 ...

    leetcode题库-Data-Structures-and-Algorithms:数据结构与算法+LeetCode上的题目_多种解法(算法)

    leetcode题库 ...题号-题目-难度-解法数量(没写就是一种解法) 1 - [两数之和] - 简单 - 2 2 - [两数相加] - 中等 3 - [无重复字符的最长子串] - 中等 - 2 4 - [寻找两个有序数组的中位数] - 困难 5 - [最长回文

    最新笔试面试常用算法收集打包

    2009/09/28 15:55 5,037 2008网宿.txt ...2009/10/05 09:45 584,607 部分IT公司笔试算法题(转) - IT类(软硬件)笔试题目及笔经精华资料专版 - 笔试题目、笔经大全 - 算法,笔试, 应届生求职招聘论坛 应届生BBS.mht

    ACM算法模板和pku代码

    本科参加ACM竞赛的过程中积累下来的一部分算法模板,和自己在PKU上面做的一部分题目。 模板目录结构: 目录: 动态规划 O(n^2)的最长上升子序列 nlogn最长上升子序列 高精度 计算几何 Graham扫描法 两线段交点 凸...

    LeetCode去除数组重复元素-Arithmetic-Swift:一些算法的swift实现

    一些算法的swift实现 桶排序 冒泡排序 快速排序 ##正好看见LeetCode可以刷Swift的题目 开始慢慢刷 swift有playground 做起来还是相当方便的 已完成题目 ----2016.9.30 两数循环 1. Two Sum 两数相加 2. Add Two ...

    中科大算法导论实验源码和报告

    二、题目 1.(必做题) 常见排序算法的实现与性能比较 问题描述:实现合并排序,插入排序,希尔排序,快速排序,冒泡排序,桶排序算法 实验要求: A. 在随机产生的空间大小分别为 N = 10, 1000,10000,100000...

    LeetCode5. 最长回文子串(双指针、中心扩展算法)

    1、题目描述 给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。 2、代码详解 class Solution(object): def longestPalindrome(self, s): res = "" for i in range(len(s)): ...

    Python查找最长不包含重复字符的子字符串算法示例

    本文实例讲述了Python查找最长不包含重复字符的子字符串算法。分享给大家供大家参考,具体如下: 题目描述 请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。例如在“arabcacfr”中...

    最长公共子序列

    算法设计与分析实验的必做题目,经验证过得源代码

    动态规划经典题目及解答整理

    动态规划经典题目及解答(含代码pdf) 1. 最长公共子序列 2. 计算矩阵连乘积 3. 凸多边形的最优三角剖分 4. 防卫导弹 5. 石子合并 6. 最小代价子母树 7. 商店购物 8. 旅游预算 9. 皇宫看守 10. 游戏室问题...

Global site tag (gtag.js) - Google Analytics