现在已知一个数组int x{a,b,c,d,e,f,g};
数组中6个变量不会重复
不固定的变量i,j
i,为多个数之间连号
例如:i=2的话  a=b+1;b=c+1至少
j,为多组连号  也就是出现i成立的次数
需要返回true 或 false例如: 1,2,3,5,6,7
i=2,j=2
[1,2,3] [5,6,7] 返回true1,2,3,4,8,9
i=3,j=2
[1,2,3]  返回false求一程序算法~~~~

解决方案 »

  1.   

    是完全匹配,还是部分匹配就可以?
    如果是完全匹配
    int i=2, j=2;
    int l=0, last;
    if (a.length < i*j) return false;
    if (a.length%j != 0) return false;
    for (int k=0, m=1; k<a.length; k++) {
        if (k == m*a.length/j || k==a.length-1) {
            if (l < i) return false;
            if (m == 1) {last = l;}
            else if (l != last) return false;
            if (k == a.length-1) break;
            last = l;
            l = 0;
            m++;
        }
        if (a[k]+1=a[k+1]) {
            l++;
        } else {
            if (l < i) return false;
            k = m*a.length/j-1;
        }
    }
    return true
      

  2.   


    大侠错了!
    1,2,3,4,5,6,7
    i=2,j=2;
    返回的false
    而且i,j允许为0的
      

  3.   


    对 123算2个
    [1,2] [2,3]  i=1,j=2
    [1,2,3]      i=2,j=1
      

  4.   


    [1,2] [2,3] i=1,j=2
    这里的i是不是应该是2连,j是2个?怎么感觉你的i总是少1个,是我理解不对吗?
      

  5.   


    public static boolean contains(int[] is, int i, int j) {
    int c = 0, sum=0;
    for (int k=0; k<is.length; k++) {
    if (c==0) c++;
    else {
    if (is[k] == is[k-1] + 1) {
    c++;
    if (c == i+1) {
    sum++;
    if (sum >= j) return true;
    else {
    c=0;
    k = k-i;
    }
    }
    } else c=1;
    }
    }
    return false;
    }
      

  6.   

    LZ题目写错了把1,2,3,4,8,9
    i=3,j=2
    [1,2,3] 返回false这里应该是[1,2,3,4] 只有1组连的,返回false
      

  7.   

    i,j允许为0甚至负数版的:public static boolean contains(int[] is, int i, int j) {
            if (is.length==0) return false;
            if (i<0 || j<=0) return true;
    int c=0, sum=0;
    for (int k=0; k<is.length; k++) {
    if (c==0) c++;
    else if (is[k] == is[k-1] + 1) c++;
    else c=1;
    if (c == i+1) {
    sum++;
    if (sum >= j) return true;
    else {
    c=0;
    k = k-i;
    }
    }
    }
    return false;
    }
      

  8.   

    遍历一次
      public static void main(String[] args) {
        Assert.assertTrue(test(2, 2, 1, 2, 3, 4, 5, 6, 7));
      }  public static boolean test(Integer i, Integer j, int... args) {
        if (i + j + 1 > args.length) {
          return false;
        }
        Arrays.sort(args);
        int count = 0;
        for (int from = 0; count < j && from < args.length - i; from++) {
          int to = from + i;
          if (args[to] - args[from] == i) {
            // 如果数组唯一升序排列,那么from和to之间数字可以直接忽略
            count++;
          }
        }
        return count >= j;
      }没考虑仔细,不过应该对
    当然【1,2,3,4,5,6,7,8】i=4,j=4也成立,亦即【1,2,3,4,5】【2,3,4,5,6】【3,4,5,6,7】【4,5,6,7,8】
      

  9.   


    public class Test{
    static int[] number = new int[]{1,2,3,4,5,6,7,8,9};

    public static void main(String[] args){
    System.out.println(check(number,4,5));
    System.out.println(check(number,3,6));
    }

    public static boolean check(int[] num,int i,int j){
    int count;
    int total = 0;
    for(int m = 0;m < num.length;m++){
    count = 0;
    for(int n = m + 1;n < num.length;n++){
    if(num[n] - num[n - 1] == 1)
    count++;
    else
    break;
    if(count == i){
    total++;
    m = n - i;
    break;
    }
    }
    }
    if(total == j)
    return true;
    return false;
    }
    }