在java中检查一个数组——它是否为filter

Check an array in java it is filter or not

本文关键字:数组 是否 filter 一个 java 检查      更新时间:2023-10-16

问题:如果数组满足以下条件,则将其定义为Filter数组

  • a。如果它包含9,那么它也包含11
  • b。如果它包含7,那么它不包含13

因此,{1,2,3,9,6,11}和{3,4,6,7,14,16},{1、2、3、4、10、11、13}和{3、6、5、13、6、13}是滤波器阵列。以下数组不是Filter数组:{9,6,18}(包含9但不包含11),{4,7,13}(同时包含7和13)编写一个名为isFilter的函数,如果其数组参数是Filter数组,则返回1,否则返回。

这是我的解决方案,你能给我提供最有效的解决方案吗?告诉我我的逻辑在这里有多有效?不允许使用内置函数和排序等,只允许使用Java上的核心逻辑,在c或c++中也可以。解决方案

static int isFilter(int[] a){
    int i,len=a.length,j,result=1,found9=0,found11=0,found7=0,found13=0;
    for(i=0;i<len;i++){
        if(a[i]==9 ){
            found9=1;
            for(j=0;j<len; j++){
                if(a[j]==11){
                    found11=1;
                }
            }
        }
        if(a[i]==7){
            found7=1;
            for(j=0;j<len;j++){
                if(a[j]==13){
                    found13=1;
                }
            }
        }
    }
    if(found9==1 && found11!=1){
        result=0;
    }
    if(found7==1 && found13!=0){
        result=0;
    }
    return result;
}

mb更高效的

static int isFilter(int[] a){
        boolean found9 = false, found11 = false, found7 = false, found13 = false;
        for (int i = 0; i < a.length; i++) {
            switch (a[i]) {
            case 7:
                found7 = true;
                break;
            case 9:
                found9 = true;
                break;
            case 11:
                found11 = true;
                break;
            case 13:
                found13 = true;
                break;
            }
        }
        if(found9 && found11) return 1;
        if(found7 && !found13) return 1;
        return 0;
    }