条件效率

时间:2015-07-06 21:09:14

标签: java

下面我给出了一个方法,给定一个名为num的整数数组,如果1,2,3在数组中,则该方法按连续顺序返回true。这个程序没有问题。然而,for循环中的条件似乎有点重复和乏味。是否有更简单,更有效的方法来解决这个问题? (即某种循环?)

public boolean array123(int[] nums) {
    boolean first = false;
    for (int i = 0; i <nums.length-2; i++)
    {
        if (nums[i] == 1)
        {
            if (nums[i+1] == 2)
            {
                if (nums[i+2] == 3)
                {
                    first = true;
                }
            }
        }
    }
    return first;
}

2 个答案:

答案 0 :(得分:3)

您可以像这样简化:

public boolean array123(int[] nums) {
    for (int i = 0; i <nums.length-2; i++){
        if(nums[i] == 1 && nums[i + 1] == 2 && nums[i + 2] == 3) {
            return true;
        }
    }
    return false;
}

答案 1 :(得分:1)

像这样的东西可能会做你想要的。在这种特殊情况下,因为你没有做任何复杂的事情,你可以抛弃结果变量,直接返回你想要的答案。主要是偏好问题。

public boolean array123(int[] nums) {
    int check = 1;
    for(int i = 0; i<nums.length; i++) {
        if(nums[i] == check || nums[i] == 1) 
        {
          if(check == 3)
          {
              return true;
          }
          check = nums[i]+1;
        } 
        else {
          check = 1;
        }
    }
    return false;
}

EDIT 更清洁的解决方案实际上就是这样的

public boolean array123(int[] nums) {
    int check = 1;
    for(int i = 0; i<nums.length; i++) {
        if(nums[i] == check) {
            if(check == 3) {
                return true;
            }
            check++;
        } else if(check > 1) {
            check = 1;
            i--;
        }
    }
    return false;
}