现在已知一个数组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求一程序算法~~~~
数组中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求一程序算法~~~~
如果是完全匹配
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
大侠错了!
1,2,3,4,5,6,7
i=2,j=2;
返回的false
而且i,j允许为0的
对 123算2个
[1,2] [2,3] i=1,j=2
[1,2,3] i=2,j=1
[1,2] [2,3] i=1,j=2
这里的i是不是应该是2连,j是2个?怎么感觉你的i总是少1个,是我理解不对吗?
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;
}
i=3,j=2
[1,2,3] 返回false这里应该是[1,2,3,4] 只有1组连的,返回false
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;
}
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】
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;
}
}