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);
}
}
分享到:
相关推荐
还有以下两个成员函数:一个用于初始化学生姓名、学号、性别和年龄的构造函数,一个用于输出学生信息的函数。编写一个主函数。声明一个学学生对象。然后调用成员函数在屏幕输出学生信息。 编程环境:vs2010,语言:...
1. 个数统计函数: count 29 2. 总和统计函数: sum 29 3. 平均值统计函数: avg 30 4. 最小值统计函数: min 30 5. 最大值统计函数: max 30 6. 非空集合总体变量函数: var_pop 30 7. 非空集合样本变量函数: var_samp 31...
在每种情况下,我们都使用一个循环来计算平滑值,然后将结果存储在输出数组 `y` 中。 C++ 实现 Matlab Smooth 函数可以使用上述代码来实现平滑一维数组数据,该方法基于 Matlab 的 smooth 函数原理,并且可以在 C++...
1. Alarm 函数:Alarm 函数是 WinCC 报警控件中的一个功能模块,提供了一些标准函数来操作报警控件。这些函数可以用来创建自定义工具栏、选择画面、定义控件上的设置等。 AcknowledgeMessage 函数:确认消息系统中...
在给定的标题“用C语言实现polyfit函数”中,我们要探讨的是如何利用C语言来编写一个类似的功能,以便根据一系列离散的数据点构建一个多项式函数模型,使该模型在这些点上的值尽可能接近实际观测值。 多项式拟合是...
这种方法的核心思想是预先计算一系列三角函数的值,并将这些值存储在一个查找表中,当需要计算特定角度的三角函数时,可以直接从表中读取近似值,避免了复杂的数学运算。 ### 查表法的基本原理 查表法的实施通常...
本文实例讲述了JavaScript自定义函数实现查找两个字符串最长公共子串的方法。分享给大家供大家参考,具体如下: //查找两个字符串的最长公共子串 function findSubStr(s1,s2){ var S=sstr= ,L1=s1.length,L2=s2....
回调函数是一种函数,它的地址被存储在另一个函数中,当那个函数执行到一定阶段时,会调用这个保存的地址,即回调函数。在MFC中,回调函数常常用于处理消息、事件或者在多线程编程中通信。 实现MFC下的回调函数有...
4. **代码实现**:在C语言中,可以定义一个函数,接受角度作为输入,然后返回相应的三角函数值。这个函数首先将角度转换为弧度,接着找到最接近的两个表项,最后执行线性插值计算。 5. **性能优化**:为了进一步...
总的来说,实现`filtfilt`函数的C版本是一项涉及数字信号处理理论、滤波器设计、C编程技巧以及数值计算的综合任务。通过这样的实践,开发者不仅能深入理解滤波器的工作原理,还能提高跨平台代码移植的能力。
可以直接在c#下使用,不需要调用动态链接库,经测试,四个函数中总有一个可以读出,且不一定需要管理员的权限,在排课助手软件中成功应用.请访问:www.pkzs2008.com.cn,欢迎技术交流。qq:39318145
filtflt滤波器函数是一个双向滤波器,通过zero-phase滤波来实现信号的滤波。该函数可以将信号分离成不同的频率成分,以便进一步处理和分析。 在 filtflt 滤波器函数中,有两个主要的滤波器设计:高低通滤波器和带通...
汉宁窗可以看作是 3 个矩形时间窗的频谱之和,或者说是 3 个 sinc(t) 型函数之和。 海明窗也是余弦窗的一种,又称改进的升余弦窗。海明窗与汉宁窗都是余弦窗,只是加权系数不同。海明窗加权的系数能使旁瓣达到更小...
2. **实现回调函数**:在客户端代码中,你需要定义一个符合上述原型的函数,并在适当的时候将它的地址传递给DLL。例如: ```cpp void MyCallback(int data) { // 处理回调逻辑 } ``` 3. **设置回调**:在DLL中...
在编程领域,尤其是在科学计算和信号处理中,`unwrap`函数是一个非常重要的工具。这个函数主要用来处理周期性数据的相位,特别是当相位由于数值计算而出现不连续(即“wrap-around”现象)时。`unwrap`函数能够检测...
1. 初始化种群:随机生成一组解,代表了算法的初始种群,每个解可以看作是一个潜在的解决方案,对应于函数的特定输入值。 2. 适应度评价:计算每个个体(解)的适应度值,这通常是根据目标函数的输出值进行的。函...
TALIB(Technical Analysis Library)是一个开源的库,主要用于金融技术分析,支持多种技术分析指标的计算,被广泛应用于量化交易领域。TALIB函数大全则是一个涵盖了TALIB库中所有函数及其使用说明的完整资源,它...
因为需要使用filter函数(MATLAB内置函数),曾在网上copy过一段代码,但是那个算法实现的不全,没有计算zf,所以我自己结合MATLAB帮助重写了一下,测试结果OK
一个简单的延时函数可能包括计数器和时钟中断,以达到预定的延时效果。 2. **上升沿和下降沿检测**: 上升沿和下降沿检测是PLC处理输入信号变化的关键。上升沿是指信号从低电平变为高电平,下降沿则是从高电平变为...
这些函数通过`S_Operate`函数来实现,该函数接受一个运算符op和一个操作数x作为参数。 ```cpp double S_Operate(char op, double x) { double a; switch (op) { case 's': a = sin(x); break; case 'c': a = ...