`
aiaiya
  • 浏览: 42580 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
最近访客 更多访客>>
社区版块
存档分类
最新评论

实现一个函数:最长顺子

    博客分类:
  • java
 
阅读更多
XX公司综合机试题第三题,以前有人讨论过,这里列出不同的算法

3.请实现一个函数:最长顺子;输入很多个整数(1<=数值<=13),返回其中可能组成的最长的一个顺子(顺子中数的个数代表顺的长度); 其中数字1也可以代表14; 顺子包括单顺\双顺\3顺;单顺的定义是连续5个及以上连续的数,比如1,2,3,4,5、3,4,5,6,7,8和10,11,12,13,1等;双顺的定义是连续3个及以上连续的对(对:两个相同的数被称为对),比如1,1,2,2,3,3、4,4,5,5,6,6,7,7和11,11,12,12,13,13,1,1等;3顺的定义是连续2个及以上连续的3张(3张:3个相同的数被称为3张),比如1,1,1,2,2,2、3,3,3,4,4,4,5,5,5,6,6,6和13,13,13,1,1,1等等;
比如:输入数组[1,5,2,3,4,4,5,9,6,7,2,3,3,4], 输出数组[2,2,3,3,4,4,5,5]

public static Integer[] doTest(Integer[] array) {
	int[] count = new int[array.length]; 
	for (int i = 0; i < array.length; i++) {
		if (array[i] < 1 || array[i] >= array.length) 
			return null;
		++count[array[i]];
	}
	TreeMap<Integer, Map<Integer, Integer>> allList = new TreeMap<Integer, Map<Integer, Integer>>();
	Map<Integer, Integer> map = null;
	for (int k = 0; k < 3; k++) {
		map = getList(count, k);
		if (null != map) {
			if (0 == k)
				allList.put(map.size(), map);
			else if (1 == k)
				allList.put(2 * map.size(), map);
			else
				allList.put(3 * map.size(), map);
		}
	}
	if (allList.size() > 0) {
		Map<Integer, Integer> maxList = allList.get(allList.lastKey());
		List<Integer> resultList = new LinkedList<Integer>();
		Collection<Integer> coll = maxList.values();
		int min = Collections.min(coll);
		for (Integer k : maxList.keySet()) {
			for (int j = 0; j < min; j++) {
				resultList.add(k);
			}
		}
		Integer[] result = new Integer[resultList.size()];
		resultList.toArray(result);
		return result;
	} else
		return null;
}

private static Map<Integer, Integer> getList(int[] count, int k) {
	TreeMap<Integer, Map<Integer, Integer>> list = new TreeMap<Integer, Map<Integer, Integer>>();
	Map<Integer, Integer> map = null;
	int flag = 0;
	for (int i = 1; i < count.length; i++) {
		if (count[i] > k && flag == 0) {
			flag = 1;
			map = new LinkedHashMap<Integer, Integer>();
			map.put(i, count[i]);
		} else if (count[i] > k && flag == 1) {
			map.put(i, count[i]);
			if (13 == i) {
				if (count[14 - i] > k) {
					map.put(14 - i, count[14 - i]);
					putList(k, list, map);
				} else {
					flag = 0;
					putList(k, list, map);
				}
			}
		} else if (count[i] <= k && flag == 1) {
			flag = 0;
			putList(k, list, map);
			map = null;
		}
	}
	if (list.size() > 0)
		return list.get(list.lastKey());
	else
		return null;
}

private static void putList(int k, TreeMap<Integer, Map<Integer, Integer>> list, Map<Integer, Integer> map) {
	if (0 == k && map.size() >= 5) {
		list.put(map.size(), map);
	}
	if (1 == k && map.size() >= 3) {
		list.put(2 * map.size(), map);
	}
	if (2 == k && map.size() >= 2) {
		list.put(3 * map.size(), map);
	}
}
分享到:
评论

相关推荐

    建立一个名为Student的类,该类有以下几个私有成员变量:学生姓名、学号、性别、年龄。还有以下两个成员函数:一个用于初始化学生姓名、学号、性别和年龄的构造函数,一个用于输出学生信息的函数。编写一个主函数。声明一个学学生对象。然后调用成员函数在屏幕输出学生信息。

    还有以下两个成员函数:一个用于初始化学生姓名、学号、性别和年龄的构造函数,一个用于输出学生信息的函数。编写一个主函数。声明一个学学生对象。然后调用成员函数在屏幕输出学生信息。 编程环境:vs2010,语言:...

    数据结构算法实现(严蔚敏版配套实现程序)

    ∷相关函数:fun函数 1.1.2 一维数组应用 3 范例1-2 一维数组应用 3 1.1.3 一维数组的高级应用 5 范例1-3 一维数组的高级应用 5 1.1.4 显示杨辉三角 7 范例1-4 显示杨辉三角 7 ∷相关函数:c函数 8 1.1.5 魔方阵 9 ...

    c++ 实现matlab smooth 函数

    在每种情况下,我们都使用一个循环来计算平滑值,然后将结果存储在输出数组 `y` 中。 C++ 实现 Matlab Smooth 函数可以使用上述代码来实现平滑一维数组数据,该方法基于 Matlab 的 smooth 函数原理,并且可以在 C++...

    WinCC标准函数C语言

    WinCC标准函数是WinCC系统中的一个重要组件,提供了一系列的标准函数,用于控制和操作WinCC报警控件。这些函数可以根据需要进行修改和扩展,还可以创建自己的标准函数。 Alarm函数集是WinCC标准函数的一部分,包含...

    C语言的画图函数大全

    "C语言的画图函数大全" C 语言的画图函数大全是指在 C 语言中用于实现图形显示和图形处理的各种函数和...C 语言的画图函数大全提供了一个完整的图形显示和图形处理解决方案,帮助开发者快速实现图形显示和图形处理。

    用C语言实现polyfit函数

    在给定的标题“用C语言实现polyfit函数”中,我们要探讨的是如何利用C语言来编写一个类似的功能,以便根据一系列离散的数据点构建一个多项式函数模型,使该模型在这些点上的值尽可能接近实际观测值。 多项式拟合是...

    查表法实现三角函数

    这种方法的核心思想是预先计算一系列三角函数的值,并将这些值存储在一个查找表中,当需要计算特定角度的三角函数时,可以直接从表中读取近似值,避免了复杂的数学运算。 ### 查表法的基本原理 查表法的实施通常...

    JavaScript自定义函数实现查找两个字符串最长公共子串的方法

    本文实例讲述了JavaScript自定义函数实现查找两个字符串最长公共子串的方法。分享给大家供大家参考,具体如下: //查找两个字符串的最长公共子串 function findSubStr(s1,s2){ var S=sstr= ,L1=s1.length,L2=s2....

    Untitled2.cpp

    本题要求实现一个函数,将两个字符串连接起来。 函数接口定义: char *str_cat( char *s, char *t ); 函数str_cat应将字符串t复制到字符串s的末端,并且返回字符串s的首地址

    C语言通用范例开发金典.part1.rar

    ∷相关函数:fun函数 1.1.2 一维数组应用 3 范例1-2 一维数组应用 3 1.1.3 一维数组的高级应用 5 范例1-3 一维数组的高级应用 5 1.1.4 显示杨辉三角 7 范例1-4 显示杨辉三角 7 ∷相关函数:c函数 8 1.1.5 ...

    三角函数查表方式c语言实现

    4. **代码实现**:在C语言中,可以定义一个函数,接受角度作为输入,然后返回相应的三角函数值。这个函数首先将角度转换为弧度,接着找到最接近的两个表项,最后执行线性插值计算。 5. **性能优化**:为了进一步...

    resample函数的C语言实现

    在数字信号处理领域,"resample"函数是一个关键的操作,用于改变信号的采样率。在MATLAB中,resample函数被广泛使用,但其内部实现通常被封装,不对外公开。然而,对于深入理解该过程或者在资源有限的环境中(如...

    三角函数的Verilog代码实现

    固定点表示需要指定一个定点位置,所有数值都是相对于这个点进行运算的。在Verilog中,可以定义`reg`类型变量,并设定合适的位宽来表示固定点数。 6. **模块化设计** 在Verilog中,为了提高代码的可读性和重用性,...

    藏经阁-函数对象.pdf

    2. 高阶函数:函数对象可以用来实现高阶函数,即函数的参数或返回值是一个函数。 3. 异步编程:函数对象可以用来实现异步编程,例如在网络编程中,函数对象可以用来处理异步I/O操作。 函数对象的缺点: 1. 复杂性...

    matlab filtfilt函数的c实现

    总的来说,实现`filtfilt`函数的C版本是一项涉及数字信号处理理论、滤波器设计、C编程技巧以及数值计算的综合任务。通过这样的实践,开发者不仅能深入理解滤波器的工作原理,还能提高跨平台代码移植的能力。

    c# 读取硬盘序列号

    可以直接在c#下使用,不需要调用动态链接库,经测试,四个函数中总有一个可以读出,且不一定需要管理员的权限,在排课助手软件中成功应用.请访问:www.pkzs2008.com.cn,欢迎技术交流。qq:39318145

    窗函数的实现及分析(4中窗函数源程序)

    汉宁窗可以看作是 3 个矩形时间窗的频谱之和,或者说是 3 个 sinc(t) 型函数之和。 海明窗也是余弦窗的一种,又称改进的升余弦窗。海明窗与汉宁窗都是余弦窗,只是加权系数不同。海明窗加权的系数能使旁瓣达到更小...

    C语言函数速查库

    C语言函数速查库是一个非常实用的资源,对于学习和使用C语言的程序员来说,它是一个不可或缺的参考资料。C语言,作为一种基础且强大的编程语言,其丰富的库函数为编写高效代码提供了可能。这个速查库涵盖了C语言中的...

    VC++ DLL 实现回调函数的实例

    2. **实现回调函数**:在客户端代码中,你需要定义一个符合上述原型的函数,并在适当的时候将它的地址传递给DLL。例如: ```cpp void MyCallback(int data) { // 处理回调逻辑 } ``` 3. **设置回调**:在DLL中...

Global site tag (gtag.js) - Google Analytics