如何查找数组的2个元素是否包含某个值

时间:2018-04-13 04:41:52

标签: java arrays loops

不知怎的,我设法用下面的代码找到一个特定的值,但是我如何搜索数组的值是否为1,右下一个值是3

unlucky1([1, 3, 4, 5]) → true
unlucky1([2, 1, 3, 4, 5]) → true
unlucky1([1, 1, 1]) → false

public boolean unlucky1(int[] nums) {
  //int[] a = new int[] {1,3};

  for(int i: nums)
  {
    if (i == 1 )

    return true;

  }
    return false;


}

4 个答案:

答案 0 :(得分:2)

您可以使用状态机:

boolean wasOne = false;
for (int i: nums) {
   if (i == 3 && wasOne) {
       return true;
   }
   wasOne = i == 1;
}
return false;

答案 1 :(得分:1)

for-each循环隐藏 迭代器(或此处的索引),因此您无法获取当前值同时检查下一个值。使用标准循环。此外,由于您无法访问任何字段,因此您可以制作方法static。像,

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

而且,在Java 8+中,您 可以 IntStreamanyMatch来表达

public static boolean unlucky1(int[] nums) {
    return IntStream.range(0, nums.length - 1)
            .anyMatch(i -> nums[i] == 1 && nums[i + 1] == 3);
}

请注意两种情况下的nums.length - 1,即确保nums[i + 1]不超过条件检查中length数组的nums。< / p>

已更新,因为您未添加下一个条件 -

  

在数组的前2个或后2个位置。

那个检查员很严格。请仔细按照说明操作。我得到(工作)

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

你也可以在没有循环的情况下实现,比如

public boolean unlucky1(int[] nums) {
    int len = (nums != null) ? nums.length : 0;
    if (len < 2) {
        return false;
    }
    if ((nums[0] == 1 && nums[1] == 3) || (nums[1] == 1 && nums[2] == 3)) {
        return true;
    }
    return len > 3 && ((nums[len - 4] == 1 && nums[len - 3] == 3) //
            || (nums[len - 2] == 1 && nums[len - 1] == 3));
}

我交换了三元顺序,但这并不重要。

答案 2 :(得分:0)

尝试此更新的代码。

导致您的question

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

public boolean unlucky1(int[] nums) {
  int len = nums.length;
  if(len<2) return false;

  if ((nums[0] == 1 && nums[1]==3)||(len>2 && nums[1] == 1 && nums[2]==3)){
       return true; 
   }

  if (nums[len-2] == 1 && nums[len-1]==3){
     return true; 
  }

    return false;
}

答案 3 :(得分:0)

尝试使用基本的for循环:

public boolean unlucky1(int[] nums) {
  boolean match = false;
  for (int i = 0; nums.length - 1 > i; i++) {
    if (1 == nums[i] && 3 == nums[i + 1]) {
      match = true;
      break;
    }
  }
  return match;
}