在数组中查找模式

时间:2016-05-04 12:48:10

标签: java arrays

此代码只能在单模式存在时获得模式。我想知道当存在2种模式时如何返回-1。例如:1 1 1 2 2 2 3.当没有模式时返回-1,1 2 3 4 5 6。

 public Long getMode() {


      long [] num = this.getElements();

      long maxValue=0, maxCount=0; 
      for (int i = 0; i < num.length; ++i){
          long count = 0;
          for (int j = 0; j < num.length; ++j){
              if (num[j] == num[i])
              ++count;
            }
             if (count > maxCount){
              maxCount = count;
              maxValue = num[i];
           }
        }
         return maxValue;
      } 

1 个答案:

答案 0 :(得分:0)

您的代码工作正常,但如果没有模式,或者存在2种模式,则不会返回-1

为此,您可以按如下方式更改程序:
(我已经改变了我已经改变过的部分)

public static Long getMode() {

    long [] num = this.getElements();
    long maxValue=0, maxCount=0; 
    boolean err = false; // New vraible to check if there is an error.
    for (int i = 0; i < num.length; ++i){
        long count = 0;
        for (int j = 0; j < num.length; ++j){
            if (num[j] == num[i])
                ++count;
        }
        if(count==maxCount && maxValue!=num[i]){ // if there are two modes
            err=true; // then set err to true.
        }else if (count > maxCount){
            maxCount = count;
            maxValue = num[i];
            err = false; // If valid mode is found, then set err to false.
        }
        System.out.println(err);
    }
    return err ? -1 : maxValue; // return value if err is false, else return -1
}