我需要一种算法来查找数组内的数字序列,并使用预定义的长度。例如:
给出长度3和数组:
{2,9,0,6,1,2,3,6,6,1,0,1,2,3,5,4,0,3,7,1,2,3,7, 5,0}
算法n应返回{1,2,3}内的3个序列 阵列。
任何人都可以指出如何实现这一目标的方向?我正在使用Java,但我接受任何语言的示例,因为我能够翻译成Java。
更新1
在我的项目中,我有一对大的有序序列[日期,小时](很容易就有数百个,我需要知道我有多少连续序列序列。
更新2
有关此问题的更多信息: 给定原始数组,我需要在其中获取其他数据,每个数组由连续的数字序列组成。
答案 0 :(得分:4)
它现在正常工作。我希望有一些方法可以让你知道。
这非常强大;如果它们出现多次,它将计算多个序列的出现次数。 Map
实际上记录了所有序列,但只打印出多次出现的序列。
请注意,第二个for循环会将ii
初始化为i
而不是0
。
import java.util.ArrayList;
import java.util.Map;
import java.util.HashMap;
public class Sequences {
public static void main(String [] args) {
int[] arr = {2, 9, 0, 6, 1, 2, 3, 6, 6, 1, 0, 1, 2, 3, 5, 4, 0, 3, 7, 1, 2, 3, 7, 5, 0};
int sequenceLength = 3;
Map<String, Integer> map = new HashMap<String, Integer>();
int count;
String str1, str2;
for (int i = 0; i <= arr.length - sequenceLength; i++) {
str1 = "";
count = 0;
for (int a = i; a < i + sequenceLength; a++) {
str1 += "" + arr[a];
}
if (map.get(str1) != null) {
continue;
} else {
map.put(str1, count);
}
for (int ii = i; ii <= arr.length - sequenceLength; ii++) {
str2 = "";
for (int a = ii; a < ii + sequenceLength; a++) {
str2 += "" + arr[a];
}
if (str1.equals(str2)) {
count++;
map.put(str1, count);
}
}
}
for (Map.Entry<String, Integer> entry : map.entrySet()){
if (entry.getValue() > 1) {
System.out.println(entry.getKey() + " " + entry.getValue());
}
}
}
}