在数组中查找连续数字组

时间:2014-04-10 23:52:05

标签: java arrays algorithm

我需要一种算法来查找数组内的数字序列,并使用预定义的长度。例如:

  

给出长度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

有关此问题的更多信息: 给定原始数组,我需要在其中获取其他数据,每个数组由连续的数字序列组成。

1 个答案:

答案 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());
            }
        }

    }
}